我正在寻找一个查询来部分透视表而不使用 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
order by排名 1 和排名 2
我在谷歌上搜索,但发现的解决方案太复杂,无法应用。
在 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
对于 N 项,如果不使用动态 SQL,则没有通用的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)