SQL Server交叉表/数据透视查询,按id包括组,并根据列中的最高值获取行



我有:

表的名称是";myTable";最大数值为7。

日期ab1999年6月1日1/7/99ab2/99//tr>c2/3/99a2/4/99b2/5/992/6/99
索引 编号 字母
0 999 1
1 999 2 a
2 999 3 a
3 999 3 b 1999年4月1日
999
5 999 4
6 999 5 a
7 888 1
8 888 1
9 888 1
10 888 2
11 888 2
12 888 3 a
13 888 4 a 1999年7月2日

这似乎很好用。。。?

Create Table #T([Index] Int, ID Int, Number Int, Letter Varchar(10), [Date] DateTime)
Insert Into #T([Index], ID, Number, Letter, [Date])
Values
(0  ,999    ,1  , 'a',  '1/1/99'),
(1  ,999    ,2  , 'a',  '1/2/99'),
(2  ,999    ,3  , 'a',  '1/3/99'),
(3  ,999    ,3  , 'b',  '1/4/99'),
(4  ,999    ,4  , 'a',  '1/5/99'),
(5  ,999    ,4  , 'b',  '1/6/99'),
(6  ,999    ,5  , 'a',  '1/7/99'),
(7  ,888    ,1  , 'a',  '2/1/99'),
(8  ,888    ,1  , 'b',  '2/2/99'),
(9  ,888    ,1  , 'c',  '2/3/99'),
(10 ,888    ,2  , 'a',  '2/4/99'),
(11 ,888    ,2  , 'b',  '2/5/99'),
(12 ,888    ,3  , 'a',  '2/6/99'),
(13 ,888    ,4  , 'a',  '2/7/99')
Select 
[Index] = Row_Number() Over (Order By ID) - 1,
ID, [1], [2], [3], [4], [5], [6], [7]
From
(
Select
ID, Number = T.Number, [Date]
From 
#T As T
Where
[Index] = (Select Top (1) HighestLetter.[Index]
From #T As HighestLetter
Where HighestLetter.ID = T.ID
And HighestLetter.Number = T.Number
Order By HighestLetter.Letter Desc)
) As Highest
Pivot
(
Max([Date])
For Number In ([1], [2], [3], [4], [5], [6], [7])
) As Piv

最新更新