2
我有以下查询,其中我按帐户和版本号连接产品和报价列表。SQL Concatenate Distinct Values
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. - 这是一个更大的查询的一部分,但一旦这个子查询被解决,它应该流入主要的一个很好(至少我认为)。如果人们需要,我可以发布主查询。
感谢您的支持。它似乎工作得很好:)。午餐后我会再测试一次。您假定的顺序是正确的。为了清楚起见,我在OP中更新了测试数据。感谢您在多余子查询中的注释。 –
好奇你为什么比'substring'更喜欢'stuff',如果你喜欢精心制作或链接到性能理性? (提前致谢)。 –
@ScottHoltzman。 。 。只是因为长度参数是不需要的。 –