2017-03-30 13 views
0

大きなデータベースがあり、このデータベースには、情報を取得するために必要な2つのテーブルがあります。私はJOINとCASE WHENの両方を使用して2つのテーブルから必要なすべてのデータを取り出しました。ここでは、出力JOINテーブルのPIVOT

SQL Server output

からのスクリーンショットは、これは私がデータをプルするために使用するコードです:関与

SELECT [PORTMultiMax].[dbo].cardholdertable.cardid as CardID,CardHolderTable.FirstName as FirstName,CardHolderTable.LastName as LastName, CardHolderTable.InitLet as MI, CardHolderPersonalDataXrTable.PersonalDataItem as Data, 
    CASE WHEN PersonalDataID = '4' THEN 'SSN' 
     WHEN PersonalDataID = '22' THEN 'Employer' 
     WHEN PersonalDataID = '30' THEN 'Training Type' 
     WHEN PersonalDataID = '32' THEN 'Primary Sponsor' 
     WHEN PersonalDataID = '37' THEN 'Training Date' 
     ELSE NULL END AS Description 
    FROM [PORTMultiMax].[dbo].[CardHolderTable] 
    join [PORTMultiMax].[dbo].[CardHolderPersonalDataXrTable] 
    on cardholdertable.CardID=CardHolderPersonalDataXrTable.CardID 
    where PersonalDataID IN (4,22,30,32,33,37) 
    order by LastName 

テーブルの名前は次のとおりです。CardHolderTableとCardHolderPersonalDataXrTable 私がするために必要なもの次に、データ内の重複した名前の項目を取り除きます。たとえば、「JAMES AARON」には、複数の記述子(「トレーニング日、トレーニングタイプ、雇用者、SSN」)を持つために複数の行があります。

PIVOTを使用して行データを取り出し、「SSN、Employer、etc ...」という列に入れてみたかったのですが、私の問題は、以前はPIVOTを使用したことがなく、現在のSQLクエリにPIVOTコードを適用する方法を混乱させることです。

助けてください。どうもありがとう

+0

編集ご質問や、サンプルデータと望ましい結果を提供します。あるいは、その情報で別の質問をしてください。 –

答えて

0

があなたのクエリを考えると、私は条件付きの集約が簡単になると思う:

SELECT ch.FirstName, ch.LastName 
     MAX(CASE WHEN PersonalDataID = '4' THEN 1 ELSE 0 END) as is_SSN 
     MAX(CASE WHEN PersonalDataID = '22' THEN ELSE 0 END) as is_Employer, 
     MAX(CASE WHEN PersonalDataID = '30' THEN ELSE 0 END) as is_TrainingType, 
     MAX(CASE WHEN PersonalDataID = '32' THEN ELSE 0 END) as is_PrimarySponsor, 
     MAX(CASE WHEN PersonalDataID = '37' THEN ELSE 0 END) as is_TrainingDate 
from [PORTMultiMax].[dbo].[CardHolderTable] ch join 
    [PORTMultiMax].[dbo].[CardHolderPersonalDataXrTable] cp 
    on ch.CardID = cp.CardID 
where PersonalDataID IN (4, 22, 30, 32, 33, 37) 
group by ch.FirstName, ch.LastName; 
+0

これは私をもっと近づけますが、personaldataItem列のデータを新しく作成した列の下に置く必要があります。その人物の名前がJohn Smithで、SSN、雇用者、訓練タイプがあれば結果は次のようになります。John Smith 123-45-6789 Disney World Badge Disney World 2011年1月1日 – CDees