我有一個非常大的查詢,我需要在一個逗號分隔的列表我與子查詢實現這個像這樣:如何在子查詢中使用不同子句的列進行排序?
STUFF((SELECT distinct ',' + t1.Name
FROM t2
inner join t1 ON t1.ID = t2.ID
WHERE t2.otherField = 12345
ORDER BY t2.ID
FOR XML PATH(''), TYPE).value('.','VARCHAR(max)'), 1, 1, '') as talentName
在我需要添加一個不同的條款這種特殊情況下(如圖示)。但是,當我這樣做時,出現以下錯誤:
Msg 145, Level 15, State 1, Line 2
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
我明白爲什麼會出現此錯誤,但我不知道該怎麼辦。 t2.ID不能包含在select語句中,因爲它會作爲結果集的一部分返回。我無法刪除order by子句,因爲逗號分隔列表必須與我生成ID的另一個列表匹配。
我該如何確保這個逗號分隔的列表既是獨特的,又是正確的順序?
最終目標
爲了幫助澄清什麼,我試圖完成,這個查詢將拉動t1.name和t1.ID.兩個逗號分隔的列表我目前在兩個單獨的STUFF語句中執行此操作,但是如果有其他方法,我會對它開放。這個查詢將返回幾千行,所以我試圖找到一個基於集合的解決方案,以避免每次加載我們的網頁時運行數千個即席查詢。
所以目前看來沒有任何保證只有一個t2.id可以存在於特定的t1.name中。這是否強制執行?如果沒有哪個id應該用於排序? –
@MartinSmith道歉;這是在數據庫中強制執行的。在ID上加入t1和t2之間有1:1的關係。我編輯了這個問題以糾正列名中的不匹配。 – Nicholas
在t1中是否是唯一的名稱? –