SQL Server 2017 の STRING_AGG 関数を使用した一意の値の生成
SQL Server 2017 の STRING_AGG
関数は、個別の値を直接サポートしません。 ただし、2 段階のアプローチを使用すると、独自の集計結果を達成することができます。 このメソッドは、STRING_AGG(DISTINCT column, ',')
.
このソリューションには、データを前処理する共通テーブル式 (CTE) が含まれます。 CTE は、最終的な集計の前にデータをグループ化して重複を排除します。
以下の例は、この手法を示しています。 最初の Sitings
CTE はサンプル データを提供します。 CTE_Animals
CTE は、State
、City
、Siting
ごとにグループ化して、冗長なエントリを削除します。次に、メイン クエリは STRING_AGG
を使用して、Siting
と State
の各組み合わせの一意の City
値を連結します。
<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') ) 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>
このアプローチでは、最後の Animals
列には各場所の一意の動物目撃情報のみが含まれることが保証され、# Of Sitings
列には個別の数が反映されます。 ORDER BY
句は、一貫性のある予測可能な出力順序を保証します。
以上がSQL Server 2017 で STRING_AGG を使用して明確な結果を得るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。