もう一度、もう一度!まず、例のテーブル変数の代わりにTemp Tableを作成したことに気づくでしょう。@tablecolumns変数はそれを必要としています。本当にあなたには当てはまりませんが、それを再生するコードをコピー/ペーストすれば、私が気づいた変更でした。
@tablecolumnsは、必要な動的なピースです。ピボットテーブルの場合、この "[A]、[B]、[C] ...."のようになります。
これで、動的SQLとしてクエリを実行して、@ tablecolumns変数に正しく挿入する必要があります。 (実際のクエリが取得ビューでクエリ自体を入れて、あなたの代わりにビューから必要なものを連結/選択するように決定することができる方法を集中的に応じて、私は時々、それは簡単です、動的SQLは少し奇妙見つける。)
create table #toystab (Toys nvarchar(1), Cost decimal (5,2), Sell decimal (5,2))
insert into #toystab values ('A', 5.50, 6.60)
insert into #toystab values ('B', 6.50, 7.60)
insert into #toystab values ('C', 7.50, 8.60)
insert into #toystab values ('D', 8.50, 9.60)
insert into #toystab values ('E', 11.50, 12.60)
insert into #toystab values ('F', 13.50, 14.60)
DECLARE @tablecolumns nvarchar(max)
select @tablecolumns = (COALESCE(@tablecolumns +',', '')
+ '[' + convert(nvarchar(10), #Toystab.Toys) +']')
from #toystab
declare @Query nvarchar(max)
set @Query = '
select *
from (
select Toys Toy1, Toys ToyName,
CONCAT(cast(Cost as varchar(10)), '','', cast(Sell as varchar(10))) as [ConcatenatedPrice]
from #toystab) Toyz
pivot
(
MAX(ConcatenatedPrice)
for Toy1 in (' + @tablecolumns+ ')
)
as [Pivot]
'
exec(@Query)
drop table #toystab
いくつか注意してください。最初に、私はToysカラムを2回、ピボットするには1回、そしてまだカラムになるように1回選択します。第2に、CONCATステートメントで区切り記号 ''、 ''は引用符( ")ではなく、2つのアポストロフィ( '')です。
SQLでは単純ではありません... SQLは、データ取得層であり、表示層ではありません。最も簡単な方法です。これは 結果をExcelにエクスポートし、それをピボットさせます。あなたは純粋なSQLの答えをしたい場合、この質問は毎日約10回ここに来る....答えのサイトを検索してください。 – Twelfth
どのdbms ???????? – Eric
Microsoft SQL 2012 – Etex