我想编写case
子句,该子句的输入来自内部查询。请让我详细描述一下。
说我有一张桌子:
create table food
( fruit varchar2(50),
chips varchar2(50)
);
带有值
INSERT INTO food
(fruit, chips)
VALUES ('Apple', 'Paprika');
INSERT INTO food
(fruit, chips)
VALUES ('Orange', 'Salt');
我想写一个查询,显示以下内容:
水果,薯条和1个(如果水果是“ Apple”),否则为0
这将给出结果(示例)
'Apple', 'Paprika', 1
'Orange, 'Salt', 0
我不想为此使用联接。 它必须是子查询。这是我必须遵守的要求。
我提出了以下查询:
select f.fruit,
((case (select ff.fruit from food ff)
when ff.fruit = 'Apple' then 1 else 0 end ) as is_apple) from food f;
但是,出现以下错误ORA-00905: missing keyword
答案 0 :(得分:4)
您不需要子查询:
select fruit, chips,
case when fruit = 'Apple'
then 1
else 0
end as is_apple
from food
如果该值必须是子查询的结果,则可以使用:
select fruit, chips,
(select case when f2.fruit = 'Apple'
then 1
else 0
end
from food f2
where f.rowid = f2.rowid
)
from food f
答案 1 :(得分:0)
如果必须是子查询,则使用dual
:
select fruit, chips,
(select case food.fruit when 'Apple' then 1 else 0 end from dual) is_apple
from food;
或使用主键(如果您的表包含它)从food
进行子选择,或rowid
:
select fruit, chips,
case (select fruit from food ff where ff.rowid = food.rowid)
when 'Apple' then 1
else 0
end is_apple
from food;