5

各複製にID番号が含まれるように、GROUP BYにID列を追加することはできますか?

私の元のデータは次のようになります。

1    AAA  [timestamp]
2    AAA  [timestamp]
3    BBB  [timestamp]
4    CCC  [timestamp]
5    CCC  [timestamp]
6    CCC  [timestamp]
7    DDD  [timestamp]
8    DDD  [timestamp]
9    EEE  [timestamp]
....

そして私はそれを次のように変換したいと思います:

1    AAA   1
2    AAA   2
4    CCC   1
5    CCC   2
6    CCC   3
7    DDD   1
8    DDD   2
...

解決策は次のとおりです。

CREATE PROCEDURE [dbo].[RankIt]
AS
BEGIN
SET NOCOUNT ON;

SELECT  *, RANK() OVER(PARTITION BY col2 ORDER BY timestamp DESC) AS ranking 
FROM MYTABLE;

END
4

2 に答える 2

8

Sql Server 2005を使用している場合は、ROW_NUMBERを使用してみてください。

DECLARE @Table TABLE(
        ID INT,
        Val VARCHAR(10)
)

INSERT INTO @Table SELECT 1,'AAA'
INSERT INTO @Table SELECT 2,'AAA'
INSERT INTO @Table SELECT 3,'BBB' 
INSERT INTO @Table SELECT 4,'CCC' 
INSERT INTO @Table SELECT 5,'CCC' 
INSERT INTO @Table SELECT 6,'CCC' 
INSERT INTO @Table SELECT 7,'DDD' 
INSERT INTO @Table SELECT 8,'DDD' 
INSERT INTO @Table SELECT 9,'EEE' 

SELECT  *,
        ROW_NUMBER() OVER(PARTITION BY VAL ORDER BY Val)
FROM    @Table
于 2010-01-14T17:44:10.513 に答える
4
create table #testalot
(
  [id] int identity,
  data varchar(50)
)

insert #testalot (data) values('AAA')
insert #testalot (data) values('AAA')
insert #testalot (data) values('BBB')
insert #testalot (data) values('CCC')
insert #testalot (data) values('CCC')
insert #testalot (data) values('CCC')
insert #testalot (data) values('DDD')
insert #testalot (data) values('DDD')

select *,ROW_NUMBER() OVER(PARTITION BY data ORDER BY data DESC) AS 'Number'
 from #testalot

 drop table #testalot

戻り値

id  data Number
1   AAA  1
2   AAA  2
3   BBB  1
4   CCC  1
5   CCC  2
6   CCC  3
7   DDD  1
8   DDD  2
于 2010-01-14T17:49:08.693 に答える