如何凝聚在特定列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) 

结果查询是

enter image description here

我还想有更概括结果会给tno,gmass,schedID和复合的一个字段(这将始终是相同的)。TicketNo将不得不被合并。

TNO,Gmass,TicketNo,SchedID,化合物

(250),(200.00),(105132,105133,105134),41729,空

任何帮助,将理解的

+3

不,这不是'coalesce'所做的。您正在寻找CSV汇总每个组的票号。 –

+0

[连接/聚合字符串的最佳方法]的可能重复(https://stackoverflow.com/questions/13639262/optimal-way-to-concatenate-aggregate-strings) –

您可以使用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是基于您的查询的主键,并用它来拉取正确的票单。