2012-10-18 29 views
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 

基本上,建立在原始查詢新的臨時重新編碼領域,當他們符合degree_level_recode該報告degree_completions他們的下面,輸入如果不匹配,則爲0。這是非常簡單的;我將針對查詢中每個元素中的其他字段對recode字段執行操作。

我已經展示了degree_completions字段以供參考,但爲了顯而易見的冗餘原因,我會在最終查詢中忽略它。

我想我需要使用CASE語句或類似的東西進行比較檢查,但我是SQL新手。

編輯:

在參考下面查的回答,以訂正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 

考慮這個代碼(表2被編輯如上文引用):

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

+0

您使用哪種數據庫平臺? – PyQL

+0

Microsoft Express SQL Server – AJBloomie

回答

1

這是你所追求的(假設:你的第一個表被稱爲#temp1中,你的第二個表稱爲#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 
+0

謝謝,我會給出這個運行。只是一個問題,是否有任何理由將嵌套的SELECT視爲p,將PIVOT視爲pvt,而不是習慣?查詢中不會引用別名。 – AJBloomie

+0

這不起作用。發佈了對原文的編輯。 – AJBloomie

+0

解決了它。 Typo造成問題。上述編輯工作。 – AJBloomie