行と列が混在しているテーブルがありません。完全に他のいくつかのデザイン。しかし、そのミスは20年前、他の誰かの時計であった。SQL行から列へ、PIVOTはおそらく動作しますが、複数の列ではどうなるかわかりません
今、私は無数の自己結合で望んでいるビューを達成しています。これは痛いほど遅いです。
以下は、現時点では私がやっている方法を設定します。これらの結果を得るために
declare @client table
(
clientNumber int,
name varchar(10)
)
insert into @client values (1, 'Bob');
insert into @client values (2, 'Alice');
declare @options table
(
clientNumber int,
optionKey varchar(4),
optionValue1 int,
optionValue2 int,
optionValue3 int
)
insert into @options values (1, 'optA', 1, 1, 0);
insert into @options values (1, 'optB', 0, 1, 0);
insert into @options values (2, 'optA', 1, 1, 1);
insert into @options values (2, 'optC', 0, 0, 1);
select c.clientNumber, c.name,
oA.optionValue1 as [Graduated],
oA.optionValue2 as [Employed],
oA.optionValue3 as [Married],
oB.optionValue1 as [HasPets],
oB.optionValue2 as [LikesThai],
oB.optionValue3 as [MathWiz],
oC.optionValue1 as [DrvLicense],
oC.optionValue2 as [Registered],
oC.optionValue3 as [Outdoorsy]
from @client c
left outer join @options oA
on oA.clientNumber = c.clientNumber and oA.optionKey = 'optA'
left outer join @options oB
on oB.clientNumber = c.clientNumber and oB.optionKey = 'optB'
left outer join @options oC
on oC.clientNumber = c.clientNumber and oC.optionKey = 'optC'
を:
結果セットは、私がしたい正確に何です。すべてのクライアントにA、B、またはCレコードがあるわけではないので、結果セットのnull
は問題ありません。私は検索のしばらくしてこのような例を見つけることができないので、私は確信していませんPIVOT
本当に私が探しているものです。提案?
更新: これは同じ結果をもたらすようです。私はもっと大きなケースでそれをテストして、すべての自己結合より速いかどうかを調べるつもりです。 (私はそれが疑わしい)。私はまだピボットで間違った木を鳴らしているかどうか知りたいです。
select clientNumber,
Min(Case o.optionKey when 'optA' then o.optionValue1 end) [Graduated],
Min(Case o.optionKey when 'optA' then o.optionValue2 end) [Employed],
Min(Case o.optionKey when 'optA' then o.optionValue3 end) [Married],
Min(Case o.optionKey when 'optB' then o.optionValue1 end) [HasPets],
Min(Case o.optionKey when 'optB' then o.optionValue2 end) [LikesThai],
Min(Case o.optionKey when 'optB' then o.optionValue3 end) [MathWix],
Min(Case o.optionKey when 'optC' then o.optionValue1 end) [DrvLicense],
Min(Case o.optionKey when 'optC' then o.optionValue2 end) [Registered],
Min(Case o.optionKey when 'optC' then o.optionValue3 end) [Outdoorsy]
from @options o
group by clientnumber
ああ、私はおそらくこのようなものに行くでしょう。そして上記の@optionsテーブルで間違いを犯しました。それらは実際には 'bit'の代わりに' int's(ある種のものか別のもの)であったはずです。 –