我试图做类似的事情:
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;
答案 0 :(得分:2)
是的,这是可能的。请参阅下面的示例,该示例可以执行您的预期操作。不同之处在于它使用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
,那么您将无法获得重复项。
答案 1 :(得分:0)
我建议使用OUTER JOIN而不是尝试在CASE表达式中使用子查询:
layer.setValue(value: NSValue(nonretainedObject: self), forKey: "ActionViewItem")
ActionView.swift:72:19: Cannot invoke 'setValue' with an argument list of type '(value: NSValue, forKey: String)'
祝你好运。
答案 2 :(得分:0)
好像你只需要加入表并进行解码。
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
答案 3 :(得分:0)
你可以在case语句中使用子查询:
选择 案例假人 当“X”然后(从双重选择“真”) 否则'假' 结束测试 从双;
正确
选择 案例(从双重选择“XXX”) 当“XXX”然后“真” 否则'假' 结束测试 从双;
正确