如何在Oracle案例条件中获取When语句的不同数据?

时间:2013-05-27 08:49:44

标签: sql oracle

我只是需要不同的数据,但不是“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”:标识符无效。

尽可能地,我不想使用子查询'因为我这样做,我的代码将运行数百行。如果除了做子查询之外别无他法,那么这将是我最后的选择。

我的要求可行吗?有什么建议?感谢

1 个答案:

答案 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>