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

SQLServer連結GROUPBY

    SQLServer2005以降を使用している場合。次に、次のように行うことができます:

    SELECT 
        JobsTagMap.JobID,
        STUFF
        (
            (
                SELECT 
                    ',' +Title
                FROM
                    Tags
                WHERE
                    Tags.TagID=JobsTagMap.TagID
                FOR XML PATH('')
            )
        ,1,1,'') AS Title
    FROM JobsTagMap
    

    編集

    異なるテーブルのテーブル構造とデータを表示しなかったためです。ちょっとわかりづらいです。したがって、テーブル構造は次のようになっていると思います。

    CREATE TABLE JobsTagMap
    (
        JobID INT,
        TagID INT
    )
    
    CREATE TABLE Tags
    (
        TagID INT,
        Title VARCHAR(100)
    )
    

    このデータを使用して:

    INSERT INTO JobsTagMap
    VALUES(1,1),(1,2),(2,2),(2,4),(2,5)
    
    INSERT INTO Tags
    VALUES(1,'Tag1'),(2,'Tag2'),(3,'Tag2'),(4,'Tag5'),(5,'Tag9')
    

    JobIDを表示しているデータを取得している場合 一意にすることはできません。あなたはJobを持っているかもしれません それがユニークな場所のテーブル。表示しているこれらのテーブルを使用したいだけの場合は、次のようなことを行う必要があります。

    ;WITH CTE
    AS
    (
        SELECT
            ROW_NUMBER() OVER(PARTITION BY JobID ORDER BY JobID) AS RowNbr,
            JobsTagMap.*
        FROM
            JobsTagMap
    )
    SELECT
        *,
        STUFF
        (
            (
                SELECT 
                    ',' +Title
                FROM
                    Tags
                    JOIN JobsTagMap
                        ON Tags.TagID=JobsTagMap.TagID
                WHERE
                    JobsTagMap.JobID=CTE.JobID
                FOR XML PATH('')
            )
        ,1,1,'') AS Title
    FROM
        CTE
    WHERE
        CTE.RowNbr=1
    

    これにより、この結果が得られます:

    1   1   1   Tag1,Tag2
    1   2   2   Tag2,Tag5,Tag9
    

    したがって、将来的には常にテーブル構造を示してください そしてそれはデータ 。それはあなたにより良い答えを与えるでしょう



    1. ルックアップとグループバイで参加

    2. WHERE value IS NOT IN(サブクエリ)

    3. Python文字列の日付をmysql日時に変換します

    4. Magento1.8を使用したNginx構成