我在 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/

10-11 06:47