SQL Server使用SUM连接到新列



请考虑以下样本数据:

Part Loc Qty
A A-1 10
A A-5 15
A B-4 7
B B-5 10
B B-6 15

我可以很容易地查询每个零件的位置数量:

select
pt.Part
,lc.Loc
,lc.LocQty Qty
from
Part pt
left join
Loc lc
on
pt.Part = lc.Part

我也可以这样总结位置:

select
pt.Part
,sum(lc.LocQty) TotalQty
from
Part pt
left join
Loc lc
on
pt.Part = lc.Part
group by
pt.Part

我现在想做的是连接到一个新的列中,该部分出现的每个位置,如下所示:

Part TotalQty InLocations
A 32 A-1, A-5, B-4
B 25 B-5, B-6

解决这一问题的最佳方法是什么?

非常感谢

SQL SERVER对GROUP_CONCAT()的替换是STRING_AGG()。但STRING_AGG()是在SQL SERVER 2017版本中引入的,您必须使用STUFFFor XML PATH的组合才能获得结果。

SELECT P.PART,SUM(QTY) AS TOTALQTY,
INLOCATIONS = STUFF(
(
SELECT ', ' + PA.LOC 
FROM PART AS PA 
WHERE PA.PART = P.PART
FOR XML PATH('')
), 1, 2, N''
) 
FROM PART P
GROUP BY P.PART

点击此处查看演示

最新更新