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

T-SQL動的ピボット

    次の例を見てください

    CREATE TABLE #Table (
            ID INT,
            ColumnName VARCHAR(250),
            Value VARCHAR(250)
    )
    
    INSERT INTO #Table SELECT 1,'name','Peter' 
    INSERT INTO #Table SELECT 1,'phone','12345678' 
    INSERT INTO #Table SELECT 1,'email','[email protected]' 
    INSERT INTO #Table SELECT 2,'name','John' 
    INSERT INTO #Table SELECT 2,'phone','87654321' 
    INSERT INTO #Table SELECT 2,'email','[email protected]' 
    INSERT INTO #Table SELECT 3,'name','Sarah' 
    INSERT INTO #Table SELECT 3,'phone','55667788' 
    INSERT INTO #Table SELECT 3,'email','[email protected]' 
    
    ---I assumed your tablename as TESTTABLE--- 
    DECLARE @cols NVARCHAR(2000) 
    DECLARE @query NVARCHAR(4000) 
    
    SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT 
                                    '],[' + t.ColumnName 
                            FROM    #Table AS t 
                            --ORDER BY '],[' + t.ID 
                            FOR XML PATH('') 
                          ), 1, 2, '') + ']' 
    
    SELECT  @cols
    
    SET @query = N'SELECT ID,'+ @cols +' FROM 
    (SELECT t1.ID,t1.ColumnName , t1.Value FROM #Table AS t1) p 
    PIVOT (MAX([Value]) FOR ColumnName IN ( '+ @cols +' )) 
    AS pvt;' 
    
    EXECUTE(@query)
    
    DROP TABLE #Table
    


    1. SQLで列と行を転置する簡単な方法は?

    2. SQLコマンドのチートシート–10分でSQLを学ぶ方法

    3. MySQL/MariaDBサーバーがいつ起動したかを確認する方法

    4. MySQL:カンマ区切りのリストを複数の行に分割