TSQL

2016-08-23 5 views
1

にピボットを使用することの私は、このテーブルがあるとしましょう:TSQL

Name  Occupation 
Samantha Doctor 
Julia  Actor 
Maria  Actor 
Meera  Singer 
Ashely  Professor 
Ketty  Professor 
Christeen Professor 
Jane  Actor 
Jenny  Doctor 
Priya  Singer 

私はこの出力を持つようにしたい:

Doctor  Professor Singer Actor 
    Jenny  Ashley  Meera Jane 
    Samantha Christeen Priya Julia 
    NULL  Ketty  NULL  Maria 

私は列に占領行を変換すると、その後で名前をリスト職業。 私はpivotの関係演算子で試してきましたが、pivotに渡す最初の引数は集約関数でなければならないので、このクエリを解決する最良の方法であるかどうかはわかりません。 これは、私はそれだけで一つの名前を返しますpivotを使用しますが、もちろん、私はmax(name)を使用しているとして取り組んできたクエリです:

doctor  actor singer professor 
Samantha Maria Priya Ketty 

select * from occupations 
pivot (max(name) for occupation in ([doctor],[actor],[singer],[professor])) 
as pvt 

これは、上記のクエリを使用して、私の出力であります

これを解決するためにpivot関係演算子を使用できますか?どのような変更ができますか?

+1

代わりに ''選択occupations'使用SELECT * FROMの* from(select *、row_number()over(職業順序によるパーティション(選択ヌル))職業からのrn)。あなたは、各行を区別させるために、row_numberなどを割り当てる必要があります。編集:最後の結果セットに行番号を表示したくない場合は、特定の列を選択するだけです。 – ZLK

答えて

1

私は条件付きの集約を使用して、これらの問題にアプローチするように傾斜しています:

select max(case when occupation = 'Doctor' then Name end) as doctor, 
     max(case when occupation = 'Actor' then Name end) as actor, 
     max(case when occupation = 'Singer' then Name end) as singer, 
     max(case when occupation = 'Professor' then Name end) as professor  
from (select t.*, 
      row_number() over (partition by occupation order by name) as seqnum 
     from thistable t 
    ) t 
group by seqnum 
order by seqnum; 
1

このSQL

with data as (
    select * from (values 
     ('Samantha', 'Doctor') 
     ,('Julia', 'Actor') 
     ,('Maria', 'Actor') 
     ,('Meera', 'Singer') 
     ,('Ashely', 'Professor') 
     ,('Ketty', 'Professor') 
     ,('Christeen','Professor') 
     ,('Jane',  'Actor') 
     ,('Jenny', 'Doctor') 
     ,('Priya', 'Singer') 
    )t(Name,Occupation) 
), 
groups as (
    select 
     Name,Occupation, 
     RowNo = row_number() over (partition by Occupation order by Name) 
    from data 
) 
select 
    Doctor,Professor,Singer,Actor 
from groups 
pivot (max(Name) for occupation in (Doctor,Professor, Singer,Actor)) as pvt 
; 

利回り:

Doctor Professor Singer Actor 
--------- --------- --------- --------- 
Jenny  Ashely Meera  Jane 
Samantha Christeen Priya  Julia 
NULL  Ketty  NULL  Maria