私はテーブルにいくつかのデータをPIVOTしようとしていますが、私はvarcharの列を使用してそれを行う方法を見つけることができないので、私はそれを行うことはできません。私はこのテーブルを持っている:ピボット列のvarchar
declare @table table(name VARCHAR(50) not null, occupation VARCHAR(MAX))
insert into @table values ('A','Doctor')
insert into @table values ('B','Doctor')
insert into @table values ('A','Professor')
insert into @table values ('A','Singer')
insert into @table values ('A','Actor')
SELECT
CASE WHEN occupation = 'Doctor' THEN NAME END AS Doctor,
CASE WHEN occupation = 'Professor' THEN NAME END AS Professor,
CASE WHEN occupation = 'Singer' THEN NAME END AS Singer,
CASE WHEN occupation = 'Actor' THEN NAME END AS Actor
FROM @table
は出力:
Doctor Professor Singer Actor
A NULL NULL NULL
B NULL NULL NULL
NULL A NULL NULL
NULL NULL A NULL
NULL NULL NULL A
とピボットのための私は、この出力を得る:
select * from
(
select name, occupation from @table) src
pivot (
min(name)
for occupation in ([Doctor],[Professor],[Singer],[Actor])) as pvt
Doctor Professor Singer Actor
A A A A
そして、最小/最大のために/ピボット機能を機能は、私は部分的にしか提供します出力、カウント関数のために私は医者、歌手などのレコードの数を取得します。しかし、私は実際の行ではなく、行数が必要です。私は必要なもの
はこれです:私たちは、医師の列の5つの項目を表示する必要が医師のための5名を持っている場合
Doctor Professor Singer Actor
A A A A
B NULL NULL NULL
すなわちは考えます。
私は、これは簡単に( `ROW_NUMBERを使用して生成される連続番号を使用するなど、条件付き集約を表現するために見つける
ありがとう:
あなたは第二ケースを使用したい場合は! :)。 しかし、Order byは他のレコードの昇順ではありません。実際にはすべての列を昇順で並べ替える必要がありますので、1,2,3,4 – MAX
@maxで注文しました。 。 。名前を昇順にするには、 'order by'節で' row_number() 'に' order by name'を使います。 –
私はrow_number()でそれを行うことができると感じました。実際、私はサブクエリも別に書いています。しかし、私は外側と実際の列のcase文の両方を内部クエリのROWIDとマージすることを知らなかった。 – MAX