感谢stackoverflow社区,我发现由于CASE WHEN,Oracle 8i不支持此查询。
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');
此查询在Oracle 8i上运行的替代方法是什么?
提前致谢!
答案 0 :(得分:5)
您应该尝试使用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到解码文档。
但是,正如评论中指出的那样,join
构造( ansi join )也不会在8i中起作用。
答案 1 :(得分:2)
而不是(case when seqnum = 1 then '1' when seqnum = cnt then '0' end)
你可以使用decode(seqnum, 1, '1', decode(seqnum, cnt, '0'))
我希望你明白这个想法