ホームページ > データベース > 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 ...) の機能と文字列集約を組み合わせることにあります。

一般的な解決策には、2 段階のグループ化プロセスが含まれます。 最初の GROUP BY 句は、関連する列 (州、市、所在地など) の一意の組み合わせを識別し、重複を排除します。 次に、2 番目の 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート