如何凝聚在特定列MSSQL查询结果
问题描述:
我运行一个简单的连接查询如下如何凝聚在特定列MSSQL查询结果
Select T.tno,P.GMass,t.TicketNo,t.SchedID,t.Compound from TicketBatch
T join PalletWeight P on T.tno=P.Tno where isProcesed = 0 and P.TNo
=(select MAX(tno) from PalletWeight)
结果查询是
我还想有更概括结果会给tno,gmass,schedID和复合的一个字段(这将始终是相同的)。TicketNo将不得不被合并。
即
TNO,Gmass,TicketNo,SchedID,化合物
(250),(200.00),(105132,105133,105134),41729,空
任何帮助,将理解的
答
您可以使用FOR XML PATH
做到这一点 - 也许不是最优雅的方式,但它应该工作:
SELECT
tno
, GMass
, '(' + LEFT(tickets, LEN(tickets)-1) + ')' AS TicketNo
, SchedId
, Compound
FROM (
SELECT DISTINCT
T.tno
, P.GMass
, ( SELECT TicketNo + ','
FROM TicketBatch T2
WHERE T.tno = T2.tno
FOR XML PATH('')) AS tickets
, T.SchedId
, T.Compound
FROM TicketBatch T
JOIN PalletWeight P
ON T.tno = P.tno
) X
您基本上使用XML PATH创建一个AAA,BBB,CCC,
字符串,并使用最内层查询并将其选为字段,然后使用外部查询添加括号并关闭尾部逗号。您可以使用WHERE T.tno = T2.tno
获得正确的票单。我假设tno
是基于您的查询的主键,并用它来拉取正确的票单。
不,这不是'coalesce'所做的。您正在寻找CSV汇总每个组的票号。 –
[连接/聚合字符串的最佳方法]的可能重复(https://stackoverflow.com/questions/13639262/optimal-way-to-concatenate-aggregate-strings) –