2016-12-29 117 views
0

我在我的語句中創建了動態列。在我的動態專欄中,我使用了各種CASE語句。現在,我無法在WHERE子句中篩選我的動態列。動態列的DB2 SQL WHERE子句

SELECT 
    item1, 
    item2, 
    CASE WHEN item1 = '1' THEN '10' END AS item3 FROM "Table1" 
WHERE item3 = '10'; 

上面的聲明給我錯誤,當我在我的動態列上使用過濾器。

回答

0

首先,你需要參考表,

SELECT 
    item1, 
    item2, 
    CASE WHEN item = '1' THEN '10' END AS item3 
FROM TABLE 

其次,item3不是原始列,因爲where條款得到select之前執行,當where得到執行,這意味着,該item3不存在。

You could do this way: 

SELECT * FROM (
SELECT 
    item1, 
    item2, 
    CASE WHEN item = '1' THEN '10' END AS item3, 
FROM TABLE) as A 
WHERE A.item3 = '10' 
0

環繞你查詢了在派生表:

select item1, item2, item3 
from 
(
    SELECT 
     item1, 
     item2, 
     CASE WHEN item = '1' THEN '10' END AS item3 
    FROM tablename 
) dt 
WHERE item3 = '10'; 
1

的錯誤是因爲之前Select,所以你不能使用Where子句中Select產生的AliasWhere子句邏輯處理。

也有一個無用逗號表名後

可以使用CASE直接Where條款

SELECT item1, 
     item2, 
     CASE WHEN item = '1' THEN '10' END AS item3 
FROM "Table1" --, unwanted comma 
WHERE CASE WHEN item = '1' THEN '10' END = '10' 

我可能會與其他兩個答案去,如果你有複雜/嵌套CASE聲明

+0

對不起,這是一個錯字。感謝您的糾正。 –

0
//with cte 
with tmp as (
SELECT 
item1, 
item2, 
CASE WHEN item = '1' THEN '10' END AS item3 
FROM "Table1" 
) 
select * from tmp where item3='10' 

//with subselect 
select * from (
SELECT 
item1, 
item2, 
CASE WHEN item = '1' THEN '10' END AS item3 
FROM "Table1" 
) tmp where item3='10' 

//with reuse case 
SELECT 
    item1, 
    item2, 
    CASE WHEN item = '1' THEN '10' END AS item3 
FROM tablename where CASE WHEN item = '1' THEN '10' END ='10'