在SQL中将行更改为列

时间:2015-06-08 03:36:57

标签: sql sql-server sql-server-2008

我有这样的查询:

SELECT ItemMaster.ERPItemCode, DistributorStock.Qty
FROM DistributorStock INNER JOIN
ItemMaster ON DistributorStock.ItemMasterId = ItemMaster.Id
WHERE (DistributorStock.DistributionCenterId = 2)

附上结果:

enter image description here

我想更改查询以在列中显示Item Code,而不是在行中。 我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:5)

使用PIVOT运算符。如果您的代码列表是动态的,并且在编写查询时您不知道完整列表,则必须使用动态数据透视,请检查此question

样品:

select 'TotalQty', [DHS20], [DHP12], [DHP10], [DHL12], ...
from
(SELECT ItemMaster.ERPItemCode, DistributorStock.Qty
    FROM DistributorStock
    JOIN ItemMaster ON DistributorStock.ItemMasterId = ItemMaster.Id
    WHERE (DistributorStock.DistributionCenterId = 2)
) src
pivot
(sum(src.Qty)
for src.ERPItemCode in ([DHS20], [DHP12], [DHP10], [DHL12], ...)
) as pvt

您可以根据需要将sum聚合函数替换为任何其他函数。对于动态查询,您必须在运行时构建查询,从其他查询构建列的列表。您可以在this question中找到如何连接字符串。