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

行データを列にSQL連結

    DECLARE @t TABLE (
        TransNo VARCHAR(20),
        Serial INT,
        Project INT
    )
    
    INSERT INTO @t (TransNo, Serial, Project)
    VALUES
        ('A00000000000001', 1, 100),
        ('A00000000000001', 2, 200),
        ('A00000000000001', 3, 201),
        ('A00000000000001', 4, 101),
        ('A00000000000002', 1, 100),
        ('A00000000000002', 2, 101),
        ('A00000000000003', 1, 100),
        ('A00000000000003', 2, 200),
        ('A00000000000004', 1, 200),
        ('A00000000000004', 2, 100),
        ('A00000000000005', 1, 101),
        ('A00000000000005', 2, 100)
    
    SELECT *, CProject = (
        SELECT DISTINCT [text()] = t2.Project
        FROM @t t2
        WHERE t2.TransNo = t1.TransNo
        ORDER BY t2.Project
        FOR XML PATH('')
    )
    FROM @t t1
    

    出力 -

    TransNo              Serial      Project     CProject
    -------------------- ----------- ----------- --------------
    A00000000000001      1           100         100101200201
    A00000000000001      2           200         100101200201
    A00000000000001      3           201         100101200201
    A00000000000001      4           101         100101200201
    A00000000000002      1           100         100101
    A00000000000002      2           101         100101
    A00000000000003      1           100         100200
    A00000000000003      2           200         100200
    A00000000000004      1           200         100200
    A00000000000004      2           100         100200
    A00000000000005      1           101         100101
    A00000000000005      2           100         100101
    

    [text()] で -

    100101200201
    

    [text()] なし -

    <Project>100</Project><Project>101</Project><Project>200</Project><Project>201</Project>
    

    詳細 - http:// www.codeproject.com/Articles/691102/String-Aggregation-in-the-World-of-SQL-Server

    更新 -

    SELECT *, CProject = (
        SELECT [text()] = t2.Project
        FROM (
            SELECT t2.Project, Serial = MIN(t2.Serial)
            FROM @t t2
            WHERE t2.TransNo = t1.TransNo
            GROUP BY t2.Project
        ) t2
        ORDER BY t2.Serial
        FOR XML PATH('')
    )
    FROM @t t1
    


    1. MySQL SELECT WHERE日時は日と一致します(必ずしも時刻とは限りません)

    2. doctrineおよびネイティブmysqlクエリから最後に挿入されたIDを取得します

    3. 一定の SQL Server 80% の CPU 使用率

    4. 非同期スレーブからMySQLGaleraクラスターを回復する方法