SQL连接不同的值

SQL连接不同的值,sql,sql-server,distinct,Sql,Sql Server,Distinct,我有下面的查询,其中我将按帐户和版本号连接产品和报价的列表 SELECT DISTINCT ST2.Account_No, ST2.version_num, substring((SELECT ',' + ST1.ProductNo AS [text()] FROM (SELECT DISTINCT Account_No, version_num, ProductNo, QuoteNo, RowNo FROM uAc

我有下面的查询,其中我将按帐户和版本号连接产品和报价的列表

SELECT DISTINCT ST2.Account_No, ST2.version_num,
    substring((SELECT  ',' +  ST1.ProductNo  AS [text()]
            FROM  (SELECT DISTINCT Account_No, version_num, ProductNo, QuoteNo, RowNo
                    FROM uAccountProductInfo) ST1
            WHERE ST1.version_num = ST2.version_num  
                AND ST1.Account_No = ST2.Account_No  
            ORDER BY ST1.RowNo, ST1.Account_No,ST1.version_num
            FOR XML PATH (''))
    , 2, 1000) [AllProduct]
    ,
    substring((SELECT  ','+  ST3.QuoteNo  AS [text()]
            FROM (SELECT DISTINCT Account_No, version_num, ProductNo, QuoteNo, RowNo
            FROM [uAccountProductInfo]) ST3
            WHERE ST3.version_num = ST2.version_num  
                AND ST3.Account_No = ST2.Account_No  
            ORDER BY ST3.RowNo, ST3.version_num 
            FOR XML PATH (''))
    , 2, 1000) [AllQuote]
FROM uAccountProductInfo ST2 
我遇到的问题是返回值没有显示不同的结果。我理解它发生的原因,但不知道如何调整它

返回结果如下所示:

Account    version_num     AllProduct    AllQuote    
1          2               aaa,aaa,aaa   111,111,111
1          3               aaa,aaa,bbb   111,111,222
我想要的是

Account    version_num     AllProduct    AllQuote    
1          2               aaa,          111
1          3               aaa,bbb       111,222
测试数据如下所示:

Account    version_num    LOB    Package    Product    Quote    RowNo
1          2              GL     1          aaa        111      1
1          2              AU     1          aaa        111      2    
1          2              PF     1          aaa        111      3
1          3              GL     1          aaa        111      1
1          3              AU     1          aaa        111      2
1          3              WK     0          bbb        222      3
他们返回同一产品|报价的多个实例的原因是包含了
RowNo
列。在此之前,我已经排除了它,它返回了不同的值列表,但是我需要按RowNo排序,以便这些值以特定的顺序出现

我整个上午都在绞尽脑汁,但我不知道如何调整查询以只返回顶层的不同值

有什么建议吗

n、 b.-这是一个较大查询的一部分,但一旦这个子查询被解析,它应该很好地流入主查询(至少我认为)。如果人们需要,我可以发布主查询。

我更喜欢
stuff()
而不是
substring()
来删除分隔字符。但是,您需要的是在子查询中
选择distinct
group by

额外的子查询是多余的。事实上,这是有误导性的,因为您使用的是
选择DISTINCT
,并期望它在每个
ProductNo
中返回一行,即使在其他列中存在多个具有不同值的行时也是如此


请注意,订单不清楚。这是基于最低的
行号

谢谢。它似乎工作得很好:)。午饭后我会做更多的测试。你假定的顺序是正确的。为了清晰起见,我在OP中更新了测试数据。感谢多余子查询中的注释。如果您想详细说明或链接到性能rational,您为什么更喜欢
stuff
而不是
substring
?(提前感谢)。@ScottHoltzman。只是因为不需要length参数。
stuff((SELECT ',' +  ST1.ProductNo  AS [text()]
       FROM uAccountProductInfo ST1
       WHERE ST1.version_num = ST2.version_num AND
             ST1.Account_No = ST2.Account_No  
       GROUP BY ST1.ProductNo
       ORDER BY MIN(ST1.RowNo) 
       FOR XML PATH ('')
      ), 1, 1, '')