1

次の結果を生成するクエリがあります。

表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 に置き換えます。

4

1 に答える 1

1

これが目的です (仮定: 最初のテーブルは #temp1 と呼ばれ、2 番目のテーブルは #temp2 と呼ばれます):

SELECT *
FROM
#temp1,
(SELECT degree_level, [AADEGREE] as col1, [BACHDEGREE] as col2
FROM 
(SELECT degree_completions, #temp1.degree_level, degree_level_recode
FROM #temp1, #temp2 WHERE #temp1.degree_level = #temp2.degree_level) AS p
PIVOT
(
SUM (degree_completions)
FOR degree_level_recode IN
([AADEGREE], [BACHDEGREE])
) AS pvt
) as V
WHERE #temp1.degree_level = V.degree_level
ORDER BY 1
于 2012-10-19T00:52:26.233 に答える