Question

Thanks to the stackoverflow community I found out that this query is not supported in Oracle 8i because of the CASE WHEN.

select (case
         when seqnum = 1 then
          '1'
         when seqnum = cnt then
          '0'
       end) as value1,
       (case
         when seqnum = 1 then
          t.BEGIN_DT
         when seqnum = cnt then
          t.END_DT
       end) as TIME1,      
       t4.UNIT1 || '.SUBBATCH_TRIGGER' TAG     
  from (select t.*,
               row_number() over(partition by t.BATCH_ID, t.plant_unit, t3.ID2 order by t.BEGIN_DT) as seqnum,
               count(*) over(partition by t.BATCH_ID, t.plant_unit, t3.ID2) as cnt
          from SCH2.tb_pg_unit_stap t
join (select ID1,batch_id from SCH2.VW_BATCH) t2 on t.BATCH_ID = t2.BATCH_ID
join (select ID2,ID1 from SCH1.STEP) t3 on t3.ID1 = t2.ID1) t
join SCH2.TB_W_MACHINE t4 on t4.plant_unit = t.plant_unit
where (seqnum = 1
    or seqnum = cnt) AND (t.BEGIN_DT > '01-jan-2013' AND t.BEGIN_DT < '01-feb-2013');

What are the alternatives for this query to run on Oracle 8i?

Thanks in advance!

Was it helpful?

Solution

You should try with decode(..., ..., ...)

select
  decode(seqnum,
            1  , '1',
            cnt, '0'
        ) as                   value1,
  decode(seqnum,
            1  , t.BEGIN_DT,
            cnt, t.END_DT
  ) as                         TIME1
  ...

here's the link to the documentation of decode.

However, as has been pointed out in a comment, the join construct (ansi joins) won't work in 8i either.

OTHER TIPS

instead of (case when seqnum = 1 then '1' when seqnum = cnt then '0' end) you could use decode(seqnum, 1, '1', decode(seqnum, cnt, '0'))

I hope you get the idea

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top