0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【MSSQL】行を列に変換するPIVOT

Last updated at Posted at 2020-12-15

Select文を使い検索する際、特定列の検索結果値を列に変換したい場合はPIVOTと集計関数を使用し表現する方法があります。
※検索の際、戻り値の数は予測できない為、動的SQLを使用します。

DECLARE @CODECOLUMNS NVARCHAR(MAX)
DECLARE @SQL         NVARCHAR(MAX)

SET @CODECOLUMNS = ''

SELECT 
  @CODECOLUMNS = @CODECOLUMNS + '[' + gorupcd + '],'
    FROM (
         SELECT DISTINCT
				CONCAT('pe_bvcd', CONVERT(NVARCHAR(6), ROW_NUMBER() OVER(PARTITION BY pe_partname ORDER BY pe_partname), 112)) gorupcd
         FROM testinfo
       ) seq
  ORDER BY gorupcd

SET @CODECOLUMNS = LEFT(@CODECOLUMNS, LEN(@CODECOLUMNS) - 1) 
-- カラム名を設定します。デバッグしてみる@CODECOLUMNS変数に[pe_bvcd1], [pe_bvcd2], [pe_bvcd3], ...の形で保存されていることが確認出来ます。

SET @SQL = ' 
     SELECT a.* FROM
     (SELECT *
      FROM (
	          SELECT pe_partname
                   , pe_bvcd
				   , CONCAT(''pe_bvcd'',CONVERT(NVARCHAR(6), ROW_NUMBER() OVER(PARTITION BY pe_partname ORDER BY pe_partname), 112)) AS gorupcd --列に変換する行を指定します。
               FROM testinfo
            ) AS result
      PIVOT ( 
              MIN(pe_bvcd) --表現したい値
              FOR gorupcd IN (' + @CODECOLUMNS + ')  --PIVOT文の中で列に変換する行のカラム名へ@CODECOLUMNS変数の値をセットします。
            ) AS pivot_result
	 ) a
'

EXEC(@SQL)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?