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

SQLServerの単一行複数列を1つの列に

    DDL:

    DECLARE @temp TABLE
    (
          Reg_No INT
        , Student_Name VARCHAR(20)
        , Subject1 INT
        , Subject2 INT
        , Subject3 INT
        , Subject4 INT
        , Total INT
    )
    
    INSERT INTO @temp (Reg_No, Student_Name, Subject1, Subject2, Subject3, Subject4, Total)
    VALUES 
        (101, 'Kevin', 85, 94, 78, 90, 347),
        (102, 'Andy ', 75, 88, 91, 78, 332)
    

    クエリ#1-ROW_NUMBER:

    SELECT  Reg_No = CASE WHEN rn = 1 THEN t.Reg_No END
        ,   Student_Name = CASE WHEN rn = 1 THEN t.Student_Name END
        ,   t.[Subject]
        ,   Total = CASE WHEN rn = 1 THEN t.Total END
    FROM (
        SELECT 
              Reg_No
            , Student_Name
            , [Subject]
            , Total 
            , rn = ROW_NUMBER() OVER (PARTITION BY Reg_No ORDER BY 1/0)
        FROM @temp
        UNPIVOT 
        (
            [Subject] FOR tt IN (Subject1, Subject2, Subject3, Subject4)
        ) unpvt
    ) t
    

    クエリ#2-外部適用:

    SELECT t.*
    FROM @temp
    OUTER APPLY 
    (
        VALUES 
            (Reg_No, Student_Name, Subject1, Total),
            (NULL, NULL, Subject2, NULL),
            (NULL, NULL, Subject3, NULL),
            (NULL, NULL, Subject4, NULL)
    ) t(Reg_No, Student_Name, [Subject], Total)
    

    クエリプラン:

    クエリコスト:

    出力:

    Reg_No      Student_Name         Subject     Total
    ----------- -------------------- ----------- -----------
    101         Kevin                85          347
    NULL        NULL                 94          NULL
    NULL        NULL                 78          NULL
    NULL        NULL                 90          NULL
    102         Andy                 75          332
    NULL        NULL                 88          NULL
    NULL        NULL                 91          NULL
    NULL        NULL                 78          NULL
    

    PS: あなたの場合、OUTER APPLYでクエリを実行します ROW_NUMBERよりも高速です 解決策。



    1. ホストからmysqlコンテナに接続しています

    2. MYSQLで文字列を連結する

    3. Laravelが名前付きパラメーターが重複しているクエリについて文句を言う

    4. 特定の状況でこのSQLが結果を返すようにするにはどうすればよいですか?