2017-05-30 36 views
0

我運行一個簡單的連接查詢如下如何凝聚在特定列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) –

回答

0

您可以使用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是基於您的查詢的主鍵,並用它來拉取正確的票單。