次の結果を生成するクエリがあります。
表1:
degree_code occupation_code degree_completions degree_level
1.0000 20-2021 10 1
1.0000 20-2022 10 1
1.1051 52-2095 2 3
1.1051 52-2095 41 2
1.5010 15-1100 2 3
使用する必要があるカスタム カテゴリに degree_level を関連付ける別の小さなルックアップ テーブルがあります。
テーブル2
degree_level degree_level_recode
1 AADEGREE
2 AADEGREE
3 BACHDEGREE
次の形式を報告する最初のクエリの出力を作成したいと思います。
degree_code occupation_code degree_completions degree_level AADEGREE BACHDEGREE
1.0000 20-2021 10 1 10 0
1.0000 20-2022 10 1 10 0
1.1051 52-2095 2 3 3 0
1.1051 52-2095 41 2 0 41
1.5010 15-1100 2 3 2 1
基本的に、元のクエリに新しい一時的な recode フィールドを作成します。このフィールドは、degree_level_recode と一致する場合にその下に degree_completions を報告します。一致しない場合は 0 を入力します。これは非常に単純化されています。クエリの各要素の他のフィールドに対して、recode フィールドで操作を実行します。
参照用に degree_completions フィールドを示しましたが、明らかな冗長性の理由から、最後のクエリでは省略します。
比較チェックにはCASEステートメントなどを使用する必要があると考えていますが、SQLは初めてです。
編集:
以下のChaの回答を参照して、改訂されたtable1出力を取得します(再コードをマッピングした後):
degree_code degree_level degree_completions degree_level_recode
01.0601 2 11 LESSCOLL
01.0601 3 22 AADEGR
01.0605 2 3 LESSCOLL
次のコードを検討してください (table2 は編集の上で参照されます)。
SELECT degree_code
,degree_level
,[LESSCOL] AS LESSCOL
,[AADEGR] AS AADEGR
,[BACHDEGR] AS BACHDEGR
,[MADEGR] AS MADEGR
,[DOCDEGR] AS DOCDEGR
FROM
(
SELECT degree_code
,table1.degree_level
,degree_level_recode
,degree_code
FROM table1
,table2
WHERE table1.degree_level = table2.degree_code
) AS p
PIVOT
(
SUM (degree_completions)
FOR degree_level_recode IN ([LESSCOL], [AADEGR], . . .)
) AS pvt
これらの結果が生成されます。
degree_code degree_level LESSCOL AADEGR BACHDEGR MADEGR DOCDEG
01.0601 2 NULL NULL NULL NULL NULL
01.0601 3 NULL 22 NULL NULL NULL
01.0505 2 NULL NULL NULL NULL NULL
私はに到達しようとしています:
degree_code degree_level LESSCOL AADEGR BACHDEGR MADEGR DOCDEG
01.0601 2 11 NULL NULL NULL NULL
01.0601 3 NULL 22 NULL NULL NULL
01.0505 2 3 NULL NULL NULL NULL
さらに、NULL を 0 に置き換えます。