我只是需要不同的数据,但不是“SELECT”语句,而是我的“case”条件。
好的这是sql代码:
select
case
when length(b.level0_iid) = 4 then 'COMPANY'
when length(b.level0_iid) = 7 and b.level0_iid like 'P%' then 'DIVISION'
else 'Error'
end "LEVEL 0"
from Transact.et_travel_transaction a,
Transact.cy_2elist b
此代码的问题:when length(b.level0_iid) = 4 then 'COMPANY'
是b.level0_iid
返回多个数据,但我只需要一个用于我的“案例”。我假设其中的所有数据都对条件有效,无论如何不是,那么就没有问题了。我已经尝试过when length(first(b.level0_iid)) = 4 then 'COMPANY'
,但错误说明:ORA-00904:“FIRST”:标识符无效。
尽可能地,我不想使用子查询'因为我这样做,我的代码将运行数百行。如果除了做子查询之外别无他法,那么这将是我最后的选择。
我的要求可行吗?有什么建议?感谢
答案 0 :(得分:2)
您需要某种聚合。这是试图说明该做什么。 case语句计算匹配每个条件的行数,以便在可能性之间进行选择:
select <all other columns here>,
(case when sum(case when length(b.level0_iid) = 4 then 1 else 0 end) > 0
then 'COMPANY'
when sum(length(b.level0_iid) = 7 and b.level0_iid like 'P%') > 0
then 'DIVISION'
else 'Error'
end) as "LEVEL 0"
from Transact.et_travel_transaction a join
Transact.cy_2elist b
on <proper join conditions here
group by <all other columns here>
您可以使用first
,方式与原始查询类似:
select <all other columns here>,
(case when first(length(b.level0_iid)) = 4
then 'COMPANY'
when first(length(b.level0_iid)) = 7 and first(b.level0_iid like) 'P%')
then 'DIVISION'
else 'Error'
end) as "LEVEL 0"
from Transact.et_travel_transaction a join
Transact.cy_2elist b
on <proper join conditions here
group by <all other columns here>