2014-10-06 27 views
0

我有onse SELECT語句來獲得不同的行,並在其中我使用「CASE」來從不同的表中獲取返回列數據。但是,一些結果並沒有給出特別的專欄。請參閱下面的示例查詢。SQL Server SELECT查詢使用「CASE ... END」來選擇列,但獲取列未找到錯誤

SELECT DISTINCT 
    T1.Col1, 
    T2.Col2, 
    CASE WHEN <My Condition > THEN T1.IncomeColumn 
    ELSE 
    T2.IncomeColumn 
    END AS FinalIncome 
FROM Table1 as t1 inner join Table2 as T2 on T1.ID = T2.ID 

這裏,根據上面的例子如果我試圖用戶查詢的結果它拋出「FinalIncome」列未找到錯誤。

我有很多花費時間來獲得這個查詢的結果,所以很難得到快速的根本原因。

請讓我知道,如果有人有這個問題的可能性有什麼想法。

在此先感謝。

+0

你能否:

case when <some column> is null then 'null brah' else <some column> end 

試圖與第一語法不這樣做將導致錯誤告訴我們你的情況? – SchmitzIT 2014-10-06 09:04:18

+1

這個查詢是你沒有向我們展示的一個較大的查詢的一部分,或者你沒有向我們展示的情況是什麼導致了這個問題。寫入的查詢(加入了'WHEN')在測試條件下工作得很好。 – 2014-10-06 09:25:36

+0

ORDER BY子句有沒有機會顯示我們?如果是,您是否通過FinalIncome訂購?如果是這樣,您需要按大小寫表達式排序而不是別名 – JamieA 2014-10-06 09:40:48

回答

1

您在CASE聲明中缺少WHEN

SELECT DISTINCT 
    T1.Col1, 
    T2.col2, 
    CASE 
     WHEN <My Condition> THEN T1.IncomeColumn 
     ELSE T2.IncomeColumn 
    END AS FinalIncome 
FROM Table1 as t1 inner join Table2 as T2 on T1.ID = T2.ID 

你能發佈<My Condition>嗎?

+0

我在** CASE **和** THEN **之間丟失「WHEN」 – NeilSah 2014-10-06 09:10:02

+0

的位置...... – 2014-10-06 09:10:26

+0

好的,我明白了,那是我在que的錯字。對不起,相同。但是,在我的實際查詢中,這不是問題。但是,我無法跟蹤的一些邏輯條件。 – NeilSah 2014-10-06 09:13:12

0

正如Francois正確指出的那樣,您在case中錯過了when。我會加重他的回答另一種形式的case:以上

select distinct 
     t1.col1, 
     t2.col2, 
     case <some expression> when <value> then t1.incomecolumn 
     else t2.incomecolumn end as finalincome 
    from table1 as t1 
     inner join 
     table2 as t2 on t1.id = t2.id; 

更類似於一個switch聲明應用程序,在那裏你創建你感興趣在表達式中的每一個可能的值的情況下。

select distinct 
     t1.col1, 
     t2.col2, 
     case when <my condition> then t1.incomecolumn 
     else t2.incomecolumn end as finalincome 
    from table1 as t1 
     inner join 
     table2 as t2 on t1.id = t2.id; 

這種方式是更詳細的兩個,並矯枉過正了一些常見sitations,你可能會爲一個預先定義的代碼中的每個值創建一個不同的條件(例如,status字段只有一個很少有可能的值,例如「OPEN」,「CLOSED」,「PENDING」等。)。

這個版本的優勢在於它是處理null值的唯一方法:其實

case <some column> when null then 'null brah' else <some column> end 
+0

是的,正如我在回覆fancois時的評論中所添加的那樣,這是我的錯誤,在我的實際查詢中沒有CASE語法錯誤。它被正確地提到 選擇不同 t1.col1, t2.col2, 情況下,當<我的條件>然後t1.incomecolumn 別的t2.incomecolumn結束,因爲finalincome 從表1爲t1 內上加入 表2爲t2 t1.id = t2.id; – NeilSah 2014-10-06 09:20:33