d0h*_*d0h 2 sql t-sql pivot sql-server-2008
这是我的问题:
我有一个名称和地址表,例如
Name | Address | Updated
----------------------------------
a | 12 lane | 1/1/2011
b | 34 avenue | 1/1/2011
c | 56 district | 1/1/2011
a | 78 avenue | 8/8/2011
b | 90 lane | 8/8/2011
a | 83 district | 9/9/2011
a | 39 road | 10/10/2011
Run Code Online (Sandbox Code Playgroud)
如您所见,人们可能拥有多个地址.假设一个人拥有的最大地址数为5.
我只对每个人获得最新的3个地址感兴趣,这样表格看起来像:
Name | Address_1 | Address_2 | Address_3
--------------------------------------------------------------
a | 78 avenue | 83 district | 39 road
b | 34 avenue | 90 lane | NULL
c | 56 district | NULL | NULL
Run Code Online (Sandbox Code Playgroud)
请注意,不会出现第一个条目"12 lane"
我一直在阅读stackoverflow上显示的其他示例,但我不确定Pivot表是否适合我需要的,因为地址都是不同的
提前感谢您提供的任何帮助!
你可以转动它.关键点是按更新的降序将row_numbers分配给地址.这会产生列名称1,2和3(以及4,5 - 但这些将被pivot命令忽略).
select name,
[1] Address_1,
[2] Address_2,
[3] Address_3
from
(
select name,
address,
row_number() over (partition by name
order by updated desc) rn
from table1
) o
pivot (min(address) for rn in ([1], [2], [3])) p
Run Code Online (Sandbox Code Playgroud)