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。 。 。只是因爲長度參數是不需要的。 –