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

目標のためのSQL動的ピボット

    CREATE TABLE #tt(id INT IDENTITY(1,1) PRIMARY KEY,EmpCode INT,Empname VARCHAR(2566),Goals VARCHAR(256));
    INSERT INTO #tt(EmpCode,Empname,Goals)VALUES
        (101,'kiran','readsql'),
        (101,'kiran','coding'),
        (101,'kiran','readcss'),
        (102,'rohit','coding'),
        (102,'rohit','readjava'),
        (103,'pradi','do nothing');
    
    DECLARE @goal_cols NVARCHAR(MAX)=STUFF((
        SELECT DISTINCT N',Goal'+CAST(ROW_NUMBER()OVER(PARTITION BY empcode ORDER BY id) AS VARCHAR(3))
        FROM #tt
        FOR XML PATH('')
        ),1,1,''
    );
    
    DECLARE @stmt NVARCHAR(MAX)=N'
        SELECT *    
        FROM (
                SELECT 
                    EmpCode,Empname,Goals,
                    goal_id=''Goal''+CAST(ROW_NUMBER()OVER(PARTITION BY empcode ORDER BY id) AS VARCHAR(3))
                FROM 
                    #tt
            ) AS s
            PIVOT(MAX(Goals) FOR goal_id IN ('[email protected]_cols+')) AS p
        ORDER BY EmpCode;';
    
    EXECUTE sp_executesql @stmt;
    
    DROP TABLE #tt;
    

    結果:

    +---------+---------+------------+----------+---------+
    | EmpCode | Empname |   Goal1    |  Goal2   |  Goal3  |
    +---------+---------+------------+----------+---------+
    |     101 | kiran   | readsql    | coding   | readcss |
    |     102 | rohit   | coding     | readjava | NULL    |
    |     103 | pradi   | do nothing | NULL     | NULL    |
    +---------+---------+------------+----------+---------+
    



    1. Mysqlは特定のテーブルの最後のIDを取得します

    2. OracleXEインスタンスのSIDを変更するにはどうすればよいですか。

    3. 次および前の要素のクエリを最適化する

    4. MySQL-テーブルのidフィールドに対応するものがない番号のリストから選択します