Tom*_*Tom 2 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)
Run Code Online (Sandbox Code Playgroud)
结果如下:

我想将查询更改为以Item Code列显示,而不是以行显示.我怎样才能做到这一点?
使用PIVOT运算符.如果您的代码列表是动态的,并且在编写查询时您不知道完整列表,则必须使用动态数据透视,请检查此问题.
样品:
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
Run Code Online (Sandbox Code Playgroud)
您可以根据需要将sum聚合函数替换为任何其他函数.对于动态查询,您必须在运行时构建查询,从其他查询构建列的列表.您可以在此问题中找到如何连接字符串.