これはピボットを使用して行われませんが、目的の結果が得られます。そして、あなたは列名を宣言する必要はありません、それは動的な列を持つことができます。上記のシナリオでテストされています。あなたがあなたのテーブル
にCross join
2時間を使うことができ
create table #testdata(id int ,month varchar(10), year int, budget_Amt int null, Actual_Amt int null)
insert into #testdata(id, month , year, budget_Amt, Actual_Amt)
values(1,'feb', 2017, 25, 30),
(2, 'mar', 2016, 10, 5),
(3, 'apr', 2016, 50, 15)
declare @count int
declare @budget_Amt varchar(500) = ''
declare @Actual_Amt varchar(500) = ''
select @count = COUNT(*) from #testdata
declare @i int = 0
while @i < @count
begin
if(@i = 0)
begin
select @budget_Amt = 'budget_Amt' + ' int null, '
select @Actual_Amt = 'Actual_Amt' + ' int null, '
set @i = @i + 1
end
else
begin
set @i = @i + 1
if(@i = @count)
begin
select @budget_Amt = @budget_Amt + 'budget_Amt' + convert(varchar(10),@i-1) + ' int null '
select @Actual_Amt = @Actual_Amt + 'Actual_Amt' + convert(varchar(10),@i-1) + ' int null '
end
else
begin
select @budget_Amt = @budget_Amt + 'budget_Amt' + convert(varchar(10),@i-1) + ' int null, '
select @Actual_Amt = @Actual_Amt + 'Actual_Amt' + convert(varchar(10),@i-1) + ' int null, '
end end
end
declare @createQuery as nvarchar(500) set @createQuery = 'create table ##temp(month varchar(10), year int,' + @budget_Amt + ',' + @Actual_Amt + ')'
EXECUTE sp_executesql @createQuery
select @createQuery declare @insert nvarchar(max) = 'insert into ##temp(month, year,'
declare @tempInsert nvarchar(MAX)
set @i = 0
while @i < @count
begin
if(@i = 0)
begin
select @tempInsert = @insert + 'budget_Amt,Actual_Amt) select month, year,budget_Amt,Actual_Amt from #testdata where id = ' +convert(varchar(10),@i+1)
select @tempInsert EXECUTE sp_executesql @tempInsert
set @i = @i + 1
end
else
begin
set @i = @i + 1
select @tempInsert = @insert + 'budget_Amt' + convert(varchar(10),@i-1) + ',Actual_Amt' + convert(varchar(10),@i-1) + ') select month, year,budget_Amt,Actual_Amt from #testdata where id = ' +convert(varchar(10),@i)
select @tempInsert EXECUTE sp_executesql @tempInsert
end
end
select * from ##temp
drop table #testdata, ##temp
をheplsを願っています(SQL Serverの(タイトルが示すように)またはMySQLを使用していますタグが示唆したように)?適切なタグを付けてください。 –
["行を列SQL Serverに変換する]"(https://stackoverflow.com/search?q=Convert+rows+To+Column+SQL)を検索すると返される他の1,118の結果を調べましたか? +サーバー)のStackoverflow? – GarethD