SQL Server で STRING_AGG を使用した個別の値
SQL Server 2017 の STRING_AGG 関数を使用すると、値を 1 つの文字列に連結できます。ただし、複数出現するフィールドを連結すると、重複した値が返される可能性があります。
次のクエリを考えてみましょう:
SELECT ProjectID, STRING_AGG( newID.value, ',') WITHIN GROUP (ORDER BY newID.value) AS NewField FROM [dbo].[Data] WITH(NOLOCK) CROSS APPLY STRING_SPLIT([bID],';') AS newID WHERE newID.value IN ('O95833', 'Q96NY7-2') GROUP BY ProjectID ORDER BY ProjectID
このクエリは連結された値を返しますが、重複が含まれます:
ProjectID | NewField |
---|---|
2 | O95833,O95833,O95833,Q96NY7-2,Q96NY7-2,Q96NY7-2 |
4 | Q96NY7-2,Q96NY7-2 |
一意の値のみを取得するには、DISTINCT キーワードをsubquery:
SELECT ProjectID ,STRING_AGG(value, ',') WITHIN GROUP (ORDER BY value) AS NewField FROM ( SELECT DISTINCT ProjectID , newId.value FROM [dbo].[Data] WITH (NOLOCK) CROSS APPLY STRING_SPLIT([bID],';') AS newId WHERE newId.value IN ( 'O95833' , 'Q96NY7-2' ) ) x GROUP BY ProjectID ORDER BY ProjectID
このサブクエリは、STRING_AGG 関数を適用する前に重複を削除します。最終結果は次のようになります:
ProjectID | NewField |
---|---|
2 | O95833, Q96NY7-2 |
4 | Q96NY7-2 |
以上がSQL Server で STRING_AGG を使用して個別の値を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。