sql >> データベース >  >> RDS >> Sqlserver

STRING_AGGでDISTINCT値を生成します

    これを行う1つの方法があります。

    個別のカウントも必要なので、行を2回グループ化するだけで実行できます。最初のGROUP BY 重複を削除します。2番目のGROUP BY 最終結果が生成されます。

    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(1) AS [# Of Sitings], STRING_AGG(Siting,',') AS Animals
    FROM CTE_Animals
    GROUP BY State, City
    ORDER BY
        State
        ,City
    ;
    

    結果

    +---------+-----------+--------------+----------+
    |  State  |   City    | # Of Sitings | Animals  |
    +---------+-----------+--------------+----------+
    | Arizona | Flagstaff |            1 | dog      |
    | Arizona | Phoenix   |            2 | bird,dog |
    | Florida | Orlando   |            2 | bird,dog |
    +---------+-----------+--------------+----------+
    

    それでも8000文字を超えるというエラーメッセージが表示される場合は、値をvarchar(max)にキャストします。 STRING_AGGの前 。

    のようなもの

    STRING_AGG(CAST(Siting AS varchar(max)),',') AS Animals
    


    1. どちらが速いですか:複数の単一のINSERTまたは1つの複数行のINSERT?

    2. MySQLでselectから削除するにはどうすればよいですか?

    3. パラメータ化されたSELECTクエリにPDOオブジェクトを適切に使用するにはどうすればよいですか?

    4. SQL ServerManagementStudioでのテーブル編集後の変更の保存