如何在特定列上合并MSSQL查询结果

时间:2017-05-30 09:21:21

标签: sql-server coalesce

我正在运行一个简单的连接查询,如下所示

 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和compound的一个字段(这将始终相同).TicketNo必须合并。

tno,Gmass,TicketNo,SchedID,Compound

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

任何帮助将不胜感激

1 个答案:

答案 0 :(得分: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是基于您的查询的主键,并用它来提取正确的票证列表。