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)