[英]How to run Oracle pl/sql or select query within a case statement in unix shell script
[英]Can Oracle PL/SQL CASE statement include a SELECT query?
我正在嘗試做類似的事情:
CASE
WHEN number IN (1,2,3) THEN 'Y' ELSE 'N' END;
相反,我想在列表的位置進行查詢,如下所示:
CASE
WHEN number IN (SELECT num_val FROM some_table) THEN 'Y' ELSE 'N' END;
我似乎無法讓它發揮作用。 此外,這里是查詢的示例。
SELECT number, (CASE
WHEN number IN (SELECT num_val FROM some_table) THEN 'Y' ELSE 'N' END) AS YES_NO
FROM some_other_table;
是的,這是可能的。 請參閱下面的示例,該示例將執行您的意圖。 不同之處在於它使用EXISTS
而不是IN
。
SELECT a.number,
(CASE WHEN EXISTS (SELECT null FROM some_table b where b.num_val = a.number)
THEN 'Y'
ELSE 'N'
END) AS YES_NO
FROM some_other_table a;
編輯:我承認:我個人更喜歡其他人給出的答案。
但是,此查詢與其他查詢之間會有所不同,具體取決於您的數據。
如果一個價值number
表中的some_other_table
你可以有許多匹配項num_val
在表some_table
,那么其他的答案將返回重復的行。 這個查詢不會。
也就是說,如果您采用其他人給出的left join
查詢,並添加一個group by
,那么您將不會得到重復項。
我建議使用 OUTER JOIN 而不是嘗試在 CASE 表達式中使用子查詢:
SELECT t.NUMBER,
CASE
WHEN s.NUM_VAL IS NOT NULL THEN 'Y'
ELSE 'N'
END AS YES_NO
FROM SOME_OTHER_TABLE t
LEFT OUTER JOIN SOME_TABLE s
ON s.NUM_VAL = t.NUMBER
祝你好運。
似乎您只需要加入表格並進行解碼即可。
with x as
(
select 1 as num from dual
union
select 2 as num from dual
union
select 3 as num from dual
),
y as
(
select 1 as num from dual
union
select 2 as num from dual
union
select 4 as num from dual
)
select x.num, decode(y.num, null, 'N','Y') as yes_no
from x
left outer join y on (x.num = y.num)
輸出:
NUM YES_NO
1 Y
2 Y
3 N
您可以在 case 語句中使用子查詢:
選擇 case dummy 當 'X' then (select 'TRUE' from dual) else 'FALSE' end TEST from dual;
真的
選擇案例(從雙重選擇'XXX')當'XXX'然后'TRUE'否則'FALSE'結束雙重測試;
真的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.