我在我的語句中創建了動態列。在我的動態專欄中,我使用了各種CASE語句。現在,我無法在WHERE子句中篩選我的動態列。動態列的DB2 SQL WHERE子句
SELECT
item1,
item2,
CASE WHEN item1 = '1' THEN '10' END AS item3 FROM "Table1"
WHERE item3 = '10';
上面的聲明給我錯誤,當我在我的動態列上使用過濾器。
我在我的語句中創建了動態列。在我的動態專欄中,我使用了各種CASE語句。現在,我無法在WHERE子句中篩選我的動態列。動態列的DB2 SQL WHERE子句
SELECT
item1,
item2,
CASE WHEN item1 = '1' THEN '10' END AS item3 FROM "Table1"
WHERE item3 = '10';
上面的聲明給我錯誤,當我在我的動態列上使用過濾器。
首先,你需要參考表,
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'
環繞你查詢了在派生表:
select item1, item2, item3
from
(
SELECT
item1,
item2,
CASE WHEN item = '1' THEN '10' END AS item3
FROM tablename
) dt
WHERE item3 = '10';
的錯誤是因爲之前Select
,所以你不能使用Where
子句中Select
產生的Alias
名Where
子句邏輯處理。
也有一個無用逗號表名後
可以使用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
聲明
//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'
對不起,這是一個錯字。感謝您的糾正。 –