我有以下表格数据:
name | serviceName | contractNo | materialNo
--------------------------------------------
item1 managed foo 123456 A6Ax33444
item1 managed bar 534454 A6A3222x7
这就是我需要的结果:
name | serviceName1 | contractNo1 | materialNo1 | serviceName2 | contractNo2 | materialNo2
item1 managed foo 123456 A6Ax33444 managed bar 534454 A6A3222x7
此示例仅包含两个服务名称,但可能有零到大约10个不同的服务。
我使用像SQL Server: Examples of PIVOTing String data或Combine multiple rows into multiple columns dynamically in SQL Server这样的数据透视和动态SQL查询尝试了几件事,但无法使其发挥作用。
使用多个联接查询真实数据,' name'来自一个表,' serviceName',' contractNo'和' materialNo'从另一个加入,并且那里有更多的列,但内容是相同的。
感谢您的帮助!
答案 0 :(得分:0)
这里我只给出了两行的解决方案。试试这个。
如果适合您,您必须尝试更多。
select d.name
,max(case when Rn = 1 then cast(ServiceName as NVARCHAR) end) ServiceName1
,max(case when Rn = 1 then cast(ContractNo as NVARCHAR) end) ContractNo1
,max(case when Rn = 1 then cast(MeterialNo as NVARCHAR) end) MeterialNo1
,max(case when Rn = 2 then cast(ServiceName as NVARCHAR) end) ServiceName2
,max(case when Rn = 2 then cast(ContractNo as NVARCHAR) end) ContractNo2
,max(case when Rn = 2 then cast(MeterialNo as NVARCHAR) end) MeterialNo2
from (
select *
,ROW_NUMBER() over(PARTITION BY name ORDER BY(select null)) Rn
from your_Table
)d
group by d.name