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

動的列と列名を使用したアンピボット

    val for col in から列名を参照できます アンピボットの一部。 Col は列名を取得します

    フィドルの例

    -- Build list of cols we want to unpivot (skip PID & UID)
    declare @cols nvarchar(max) 
    select @cols = coalesce(@cols+N',', N'') + quotename(c.name) from syscolumns c
    inner join sysobjects o on c.id = o.id and o.xtype = 'u'
    where o.name = 'MyTable' and c.name not in ('PID', 'UID') order by c.colid
    
    declare @query nvarchar(max)  
    
    select @query = N'
    select PID, [UID], Col as ID, Val
    from 
        (
        select PID, UID, ' + @cols + '
        from MyTable
        where UID <> 0
        ) as cp
        unpivot
        (
        Val for Col in (' + @cols + ')
        ) as up
    '
    exec sp_executesql @query 
    



    1. SnowLeopardへのMySQLdbのインストール

    2. SQL Server でアクセントを区別しない比較 (e、é、ê、および ë と e) を実行するにはどうすればよいですか?

    3. サブクエリと相関サブクエリの違い

    4. mysqlのcount(*)またはcount(table_field_name)の方が速いですか?