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

UNPIVOT を使用した列の行への転置

    YP は簡単に分割できます LEFT() を使用した文字列 、 RIGHT() , SUBSTRING() など。私の提案は、UNPIVOT の処理方法です。 . UNPIVOT する列がたくさんあるようです したがって、このクエリを実行するために動的 SQL を実装することをお勧めします。このようにします:

    declare @colsUnpivot varchar(max), @query AS NVARCHAR(MAX), @cols varchar(max)select @colsUnpivot =stuff((select ',' +quotename(replace(C.name, 'Qty) ', '')) from sys.columns as C where C.object_id =object_id('yourtable') and C.name like 'Qty%' for xml path('')), 1, 1, '')select @ cols =stuff((select ',' +quotename(C.name) + ' as ' + replace(C.name, 'Qty', '') from sys.columns as C where C.object_id =object_id('yourtable' ) および C.name like 'Qty%' for xml path('')), 1, 1, '')set @query ='select rowid, left(YP, 1) YP, cast(right(YP, len( YP) - 1) as int) period, Val from ( select rowid, ' + @cols + ' from yourtable ) x1 unpivot ( val for YP IN (' + @colsUnpivot + ') ) u'exec(@query)  

    SQL Fiddle with Demo を参照してください



    1. ストアドプロシージャの変数にSelectを割り当てます

    2. データベーステーブルにいくつかのレコードがあるかどうかを確認する最速の方法は?

    3. 動的クロス集計クエリを実行する

    4. 関数内のテーブルに値を挿入するとエラーが発生しますが、関数外のテーブルに値を挿入しようとすると正常に機能します