首頁 > 資料庫 > mysql教程 > 如何使用 SQL Server 的 STRING_AGG 取得不同值及其連接字串?

如何使用 SQL Server 的 STRING_AGG 取得不同值及其連接字串?

DDD
發布: 2025-01-24 06:51:13
原創
688 人瀏覽過

How Can I Use SQL Server's STRING_AGG to Get Distinct Values and Their Concatenated String?

使用 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板