1

我只需要不同的数据,但不是在“SELECT”语句上,而是在我的“案例”上条件下。

好的,这是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”:无效标识符。

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

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

4

1 回答 1

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>
于 2013-05-27T12:33:46.987 回答