[英]WHERE on a SELECT sub-query
这是一张桌子
--------------------
| Id | Val |
|---------|--------|
| 1 | 4 |
| 2 | 3 |
| 3 | 5 |
| 4 | 1 |
--------------------
我需要一个查询
SELECT * ,
CASE
WHEN val > 3 THEN 'PASS'
ELSE 'FAIL'
END as Status
FROM StatusTable
WHERE Status = 'PASS'
但是,它似乎并没有那样工作。 这是错误:
Uncaught Error: near "when": syntax error
请帮我解决问题。
假设这是 oracle:有两件事破坏了这个查询。
SELECT *
来获取所有列,但不能执行SELECT *, <some other column>
。 这将引发 ORA-00923: FROM keyword not found where expected。 解决方法是为表格和“*”添加别名,例如SELECT t.*, t.<some other column>
WHERE
子句中可以引用表列或函数,而不是SELECT
子句中列的别名。 WHERE Status = 'PASS'
失败,因为“Status”是别名,而不是列。考虑到这两个因素,查询变为:
WITH StatusTable(id, val) AS
(
SELECT 1,4 FROM DUAL UNION ALL
SELECT 2,3 FROM DUAL UNION ALL
SELECT 3,5 FROM DUAL UNION ALL
SELECT 4,1 FROM DUAL
)
SELECT
t.* ,
CASE
WHEN t.val > 3 THEN 'PASS'
ELSE 'FAIL'
END as Status
FROM StatusTable t
WHERE
CASE
WHEN t.val > 3 THEN 'PASS'
ELSE 'FAIL'
END = 'PASS';
我没有直接回答你的问题,但你似乎想要 val > 3 的所有行
为什么需要使用“失败”和“通过”?
SELECT Id, Val
FROM StatusTable
WHERE Val > 3
应该给你与其他建议查询相同的结果
如果您需要带有“通过”的列,您可以手动添加它:
SELECT Id, Val, 'Pass'
FROM StatusTable
WHERE Val > 3
您在查询中缺少 from 子句
SELECT * ,
CASE
WHEN val > 3 THEN 'PASS'
ELSE 'FAIL'
END as Status
FROM Table_Name
WHERE Status = 'PASS'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.