我正在寻找一个查询来部分地转动表而不使用PIVOT运算符(旧的ms-sql服务器)。
表:
id-------item---------rank1---------rank2
231------it1--------- 1 ----------- 1
231------it2-------- 1 ----------- 2
231------it3--------- 1 ----------- 3
154------it4--------- 3 ----------- 4
154------it2--------- 1 ----------- 2
155------it2--------- 1 ----------- 2
156------it3 -------- 2 ----------- 2
156------it1 -------- 1 ----------- 1
预期结果:
id---------item1----item2----item3---item*...
231 -------it1------it2---------it3
154--------it2------it4
155--------it2
156--------it1------it3
排序 rank1和rank2
我在google上搜索过,但我找到的解决方案实在太复杂了。
答案 0 :(得分:1)
在SQL Server中,您可以使用row_number
为每个id
组分配行号。然后你可以使用max(case(...
技巧来转动:
select id
, max(case when rn = 1 then item end) as item1
, max(case when rn = 2 then item end) as item2
, max(case when rn = 3 then item end) as item3
from (
select row_number() over (partition by id
order by rank1, rank2) as rn
, *
from YourTable
) as SubQueryAlias
group by
id
如果不使用动态SQL,则没有N项的通用解决方案。