0
select    
    TM.Tranaction_Slno,TT.Location,
    [Container Number] = stuff((select ',' + TD.Container_Number 
                                from Transaction_Data 
                                for xml path('')), 1, 1, '')   
from 
    Transaction_Master TM         
inner join 
    Transaction_Data TD on TD.Tranaction_Slno = TM.Tranaction_Slno        
left join 
    Transaction_Track TT on TT.Transaction_Slno = TM.Tranaction_Slno 
where 
    TM.Tranaction_Slno = 1770575 

我得到的输出带有复制 n 次的连接值。输出附在下面:

在此处输入图像描述

此屏幕截图显示不使用 stuff 功能:

在此处输入图像描述

我想要这样的输出:

Transaction_Slno    Location    Container_Number
----------------------------------------------------------
1770575             CUSTOM       ZIMU1374787,TRHU3437713
1770575             ZERO         ZIMU1374787,TRHU3437713
1770575             CFS          ZIMU1374787,TRHU3437713
4

2 回答 2

2

您可以尝试使用不同的代码,还需要在 xml 路径代码中添加 where 条件

select  
        TM.Tranaction_Slno,TT.Location,
        [Container Number] = stuff((select distinct  ',' + Container_Number 
                                    from Transaction_Data TD1 
                                    where TD1.Transaction_Slno=TD.Transaction_Slno
                                    and  TD1.Location=TD.Location
                                    for xml path('')), 1, 1, '')   
    from 
        Transaction_Master TM         
    inner join 
        Transaction_Data TD on TD.Tranaction_Slno = TM.Tranaction_Slno  and  TM.Location=TD.Location      
    left join 
        Transaction_Track TT on TT.Transaction_Slno = TM.Tranaction_Slno and  TM.Location=TT.Location
    where 
        TM.Tranaction_Slno = 1770575 
于 2019-02-28T06:03:19.390 回答
2

您可以尝试使用组连接逻辑,如下所示:

SELECT
    tm.Transaction_Slno,
    tt.Location,
    [Container Number] = STUFF((
        SELECT ',' + td.Container_Number
        FROM Transaction_Data td
        WHERE td.Transaction_Slno = tm.Transaction_Slno
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM Transaction_Master tm
INNER JOIN Transaction_Track tt
    ON tt.Transaction_Slno = tm.Transaction_Slno
ORDER BY
    tm.Transaction_Slno;

您当前调用的主要逻辑问题STUFF是它不会将针对Transaction_Data表的查询与查询中涉及的其他表相关联。

于 2019-02-28T06:07:27.943 回答