我在我的语句中创建了动态列。在我的动态专栏中,我使用了各种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'
对不起,这是一个错字。感谢您的纠正。 –