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

複数のデータ行を 1 行に連結する

    STUFF を使用して csv 値を生成できます。以下は私が普段使っているものです。

        CREATE TABLE #Book
        (
            Id INT ,
            NAME VARCHAR(100) ,
            Description VARCHAR(100)
        );
    
    CREATE TABLE #BookReader
        (
            BookId INT ,
            Name VARCHAR(100)
        );
    
    
    CREATE TABLE #BookVersion
        (
            BookId INT ,
            Version VARCHAR(10)
        );
    
    
    INSERT INTO #Book ( Id ,
                        NAME ,
                        Description )
    VALUES ( 1 ,            -- Id - int
             'Book1' ,      -- NAME - varchar(100)
             'Book 1 Title' -- Description - varchar(100)
        ) ,
           ( 2 ,            -- Id - int
             'Book2' ,      -- NAME - varchar(100)
             'Book 2 Title' -- Description - varchar(100)
           ) ,
           ( 3 ,            -- Id - int
             'Book3' ,      -- NAME - varchar(100)
             'Book 3 Title' -- Description - varchar(100)
           ) ,
           ( 4 ,            -- Id - int
             'Book5' ,      -- NAME - varchar(100)
             'Book 5 Title' -- Description - varchar(100)
           );
    
    INSERT INTO #BookReader ( BookId ,
                              Name )
    VALUES ( 1 ,     -- BookId - int
             'James' -- Name - varchar(100)
        ) ,
           ( 2 ,        -- BookId - int
             'Stephane' -- Name - varchar(100)
           ) ,
           ( 2 ,       -- BookId - int
             'Michael' -- Name - varchar(100)
           );
    
    INSERT INTO #BookVersion ( BookId ,
                               Version )
    VALUES ( 1 ,  -- BookId - int
             'v1' -- Version - varchar(10)
        ) ,
           ( 1 ,  -- BookId - int
             'v2' -- Version - varchar(10)
           ) ,
           ( 2 ,  -- BookId - int
             'v1' -- Version - varchar(10)
           ) ,
           ( 2 ,  -- BookId - int
             'v2' -- Version - varchar(10)
           ) ,
           ( 2 ,  -- BookId - int
             'v3' -- Version - varchar(10)
           );
    
    
    SELECT b.Id ,
           LTRIM(STUFF((   SELECT ', ' + br1.[Name] AS [text()]
                     FROM   #BookReader br1
                     WHERE  br1.BookId = b.Id
                     FOR XML PATH('')) ,
                 1 ,
                 1 ,
                 '')) AS Reader ,
           LTRIM(STUFF((   SELECT ', ' + Version
                     FROM   #BookVersion bv1
                     WHERE  bv1.BookId = b.Id
                     FOR XML PATH('')) ,
                 1 ,
                 1 ,
                 '')) AS version
    FROM   #Book b;
    
    
    
    DROP TABLE #Book;
    DROP TABLE #BookReader;
    DROP TABLE #BookVersion;
    

    結果:

    +----+--------------------+-------------+
    | Id |       Reader       |   Version   |
    +----+--------------------+-------------+
    |  1 | James              | v1, v2      |
    |  2 | Stephane, Michael  | v1, v2, v3  |
    |  3 | NULL               | NULL        |
    |  4 | NULL               | NULL        |
    +----+--------------------+-------------+
    



    1. T-SQLを使用してSQLServerエージェントジョブを作成する

    2. あるデータベースから含まれているテーブルをコピーして、別のデータベーステーブルに挿入したい

    3. mySQLMAX値をJava変数に設定します

    4. PostgreSQL-浮動小数点数の丸め