2017-10-26 7 views
0

次のような表があります。SQLサーバーの行を4列に変換する

最大IDには4つの理由があります。そのReason列を4列に変換して他の行を削​​除したい。 IDに4つの理由がない場合でも、4つの列に分割してNULLにします。 IDに同じ理由がある場合は、繰り返して1つの列に表示し、他の列をNULLにします。

理由列が異なる理由の数に基づいて異なる列に分割する必要

期待される結果は以下の通りです。 表:

ID Date Reason 
100 10/27/2017 Insufficient 
100 10/27/2017 Excessive 
101 10/20/2017 Excessive 
101 10/20/2017 Excessive 
101 10/20/2017 Insufficient 
101 10/20/2017 Derog 
105 10/24/2017 Length 
106 10/10/2017 Dismiss 
107 10/10/2016 Rejected 
108 10/10/2016 Dismiss 

期待される結果:ここで

ID Date Reason1 Reason2 Reason3 
100 10/27/2017 Insufficient Excessive NULL 
101 10/20/2017 Excessive Insufficient Derog 
105 10/24/2017 Length NULL NULL 
106 10/10/2017 Dismiss NULL NULL 
107 10/10/2016 Rejected NULL NULL 
108 10/10/2016 Dismiss NULL NULL 
+0

.. – HadoopAddict

+0

IDは、最大3つの異なる理由がないことができます。.. – HadoopAddict

+0

、それは偶然ではなかったんが、それは意図的だった...彼らは削除する必要があり、重複がある場合。 – HadoopAddict

答えて

3

はあなたが4列の最大を持っている場合は、あなたがこれを行うだろうかです。 5番目の列がある場合は、この列には表示されません。動的に列の数を処理するには、動的SQLを使用する必要があり、複雑さがかなり急激に上がります。

declare @Something table 
(
    ID int 
    , MyDate date 
    , Reason varchar(20) 
) 

insert @Something values 
(100, '10/27/2017', 'Insufficient') 
, (100, '10/27/2017', 'Excessive') 
, (101, '10/20/2017', 'Excessive') 
, (101, '10/20/2017', 'Excessive') 
, (101, '10/20/2017', 'Insufficient') 
, (101, '10/20/2017', 'Derog') 
, (105, '10/24/2017', 'Length') 
, (106, '10/10/2017', 'Dismiss') 
, (107, '10/10/2016', 'Rejected') 
, (108, '10/10/2016', 'Dismiss') 
; 

select x.ID 
    , Result1 = MAX(case when RowNum = 1 then Reason end) 
    , Result2 = MAX(case when RowNum = 2 then Reason end) 
    , Result3 = MAX(case when RowNum = 3 then Reason end) 
    , Result4 = MAX(case when RowNum = 4 then Reason end) 
from 
( 
    select * 
     , RowNum = ROW_NUMBER() over (partition by ID order by MyDate) 
    from @Something 
    group by ID, Reason, MyDate 
) x 
group by x.ID 
私は、SQL Serverを使用しています
+0

私は今、あなたが5ではなく4つの列を求めていることを知っています。いいえ、私はちょうど4番目の列を追加しました。 –

+0

ありがとう@SqlZim。むしろばかげているだろうか。 :)そして、ROW_NUMBERのクエリでは別のものはすべてユニークになるので不条理です。 –

関連する問題