请考虑以下样本数据:
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版本中引入的,您必须使用STUFF
和For 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
点击此处查看演示