CREATE TABLE test_table (
e_id NUMBER(10),
e_value NUMBER(10)
);
INSERT INTO test_table VALUES(11,123);
INSERT INTO test_table VALUES(11,123);
INSERT INTO test_table VALUES(11,null);
COMMIT;
test_table如果任何一個值null在列中,我想從表中獲取單個記錄,e_value那么它應該列印No其他Yes
我的嘗試:
SELECT e_id,
CASE
WHEN e_value IS NULL THEN 'No'
ELSE 'Yes'
END is_answer
FROM test_table;
電流輸出:
------ -----------
| e_id | is_answer |
------ -----------
| 11 | Yes |
| 11 | Yes |
| 11 | No |
------ -----------
預期輸出:
------ -----------
| e_id | is_answer |
------ -----------
| 11 | No |
------ -----------
uj5u.com熱心網友回復:
也許嘗試將其放入 CTE,然后從中進行選擇
with tagged_is_answer AS(
SELECT e_id,
CASE
WHEN e_value IS NULL THEN 'No'
ELSE 'Yes'
END is_answer
FROM test_table;
),
ordered_tagged_is_answer as (
select e_id
,is_answer
,row_number() over(partition by e_id order by is_answer asc) is_answer_order
from tagged_is_answer
)
select e_id,is_answer from ordered_tagged_is_answer where is_answer_order=1
/*will pick No's before Yes's*/
CTE 是在記憶體中創建的,因此請確保您的表不大于記憶體。
uj5u.com熱心網友回復:
e_value用排序NULLS FIRST,只得到第一行:
SELECT e_id,
CASE WHEN e_value IS NULL THEN 'No' ELSE 'Yes' END is_answer
FROM test_table
ORDER BY e_value NULLS FIRST
FETCH FIRST ROW ONLY;
其中,對于樣本資料,輸出:
E_ID IS_ANSWER 11 不
db<>在這里擺弄
uj5u.com熱心網友回復:
你可以使用GROUP BY和COUNT:
SELECT e_id,
CASE
WHEN count(e_id) = count(e_value) THEN 'Yes'
ELSE 'No'
END is_answer
FROM test_table
GROUP BY e_id;
計數將回傳非空值的數量
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/454332.html
