ホームページ >データベース >mysql チュートリアル >SQL Server の STRING_AGG を使用して個別の値とその連結文字列を取得するにはどうすればよいですか?
個別値と連結に 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 サイトの他の関連記事を参照してください。