[英]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.