我在 SQL Server 中有一个表:产品
产品表 :
ImageID ProductID
------- ----------
1 P1
1 P2
1 P3
2 S1
2 S2
2 S3
3 M1
这是我需要的输出:
ImageID Product1ID Product2ID Product3ID
----------- ---------- ---------- ----------
1 P1 P2 P3
2 S1 S2 S3
3 M1 null null
一个 ImageID 最多可以有 3 个 ProductID
没有必要所有的 ImageID 都有 3 个产品 [例如。图像 ID=3]
SELECT ImageID, [Product1ID], [Product2ID], [Product3ID]
FROM
(
SELECT ImageID, ProductID
FROM ProductTable
) AS P
PIVOT
(
max( ImageID)
FOR ProductID IN ([Product1ID], [Product2ID], [Product3ID])
) AS PVT
最佳答案
你非常接近,你只需要加入 Row_Number()
示例
Select *
From (
Select ImageID
,Item = concat('Product',row_number() over (partition by ImageID order by ProductID),'ID')
,ProductID
From ProductTable
) src
Pivot (max(ProductID) for Item in ([Product1ID], [Product2ID], [Product3ID])) pvt
关于SQL 透视字符串数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53764513/