使用 SQL Server 的 STRING_AGG 實作不同值與串聯
SQL Server 的 STRING_AGG 函數可以有效地連接多行中的值。 然而,直接獲取不同的值及其連接的字串需要稍微複雜的方法。 挑戰在於將 COUNT(DISTINCT ...)
的函數與字串聚合結合。
常見的解決方案涉及兩步驟分組過程。 第一個 GROUP BY
子句標識相關欄位(例如,州、城市、選址)的唯一組合,從而消除重複項。 然後,第二個 GROUP BY
聚合這些唯一的組合,使用 STRING_AGG 連接不同的值。此方法提供不同值的計數和連接字串。
這是示範此技術的範例:
<code class="language-sql">WITH Sitings AS ( SELECT * FROM (VALUES (1, 'Florida', 'Orlando', 'bird'), (2, 'Florida', 'Orlando', 'dog'), (3, 'Arizona', 'Phoenix', 'bird'), (4, 'Arizona', 'Phoenix', 'dog'), (5, 'Arizona', 'Phoenix', 'bird'), (6, 'Arizona', 'Phoenix', 'bird'), (7, 'Arizona', 'Phoenix', 'bird'), (8, 'Arizona', 'Flagstaff', 'dog') ) AS F (ID, State, City, Siting) ), CTE_Animals AS ( SELECT State, City, Siting FROM Sitings GROUP BY State, City, Siting ) SELECT State, City, COUNT(*) AS [# Of Sitings], STRING_AGG(Siting, ',') AS Animals FROM CTE_Animals GROUP BY State, City ORDER BY State, City;</code>
此查詢產生一個結果集,顯示每個城市和州的不同動物目擊事件:
<code>+---------+-----------+--------------+----------+ | State | City | # Of Sitings | Animals | +---------+-----------+--------------+----------+ | Arizona | Flagstaff | 1 | dog | | Arizona | Phoenix | 2 | bird,dog | | Florida | Orlando | 2 | bird,dog | +---------+-----------+--------------+----------+</code>
處理長字串:
如果連接的站點字串超過 varchar
的 8000 個字元限制,則需要在使用 Siting
之前將 varchar(max)
列明確轉換為 STRING_AGG
以避免截斷:
<code class="language-sql">STRING_AGG(CAST(Siting AS VARCHAR(MAX)), ',') AS Animals</code>
這確保連接的字串可以容納更長的結果。
以上是如何使用 SQL Server 的 STRING_AGG 取得不同值及其連接字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!