0

我正在尝试在 Oracle 8i 中运行此查询,但它不起作用!

SELECT DECODE(seqnum, 1, t.ID1,cnt,'0') PI_VALUE1,
  DECODE(seqnum, 1, t.STARTTIME,cnt,t.ENDTIME) timestamp,
  '090.'
  || t2.APP
  || '.BATCH' tagname
FROM
  (SELECT t.*,
    row_number() over(partition BY t.ID1, t.PLANT_UNIT order by t.STARTTIME) AS seqnum,
    COUNT(*) over(partition BY t.ID1, t.PLANT_UNIT) cnt
  FROM tb_steps t
  ) t
INNER JOIN tb_equipments t2
ON t2.plant_unit = t.plant_unit
WHERE (seqnum    = 1
OR SEQNUM        = CNT)
AND (T.STARTTIME  > '15-jul-2013'
AND t.ENDTIME    < '15-aug-2013') ;

我已经进行了很多更改 [例如更改case whendecode],但仍然不行...

有人可以帮我编写 Oracle 8i 支持的查询吗?

PS.:我知道 Oracle for AGES 不支持此版本,但我只是为我的 .NET 应用程序查询数据,因此我无法升级/触摸数据库。

版本是 8.1.7,具体错误:

ORA-00933: SQL command not properly ended.

非常感谢,

4

1 回答 1

3

直到 Oracle Database 9iR1 (9.0.1) 才引入 ANSI 连接。它们在 8.1.7 中不受支持。

尝试在没有 ANSI 样式连接的情况下重新编写查询。

像这样的东西可能会起作用:

SELECT DECODE(seqnum, 1, t.ID1,cnt,'0') PI_VALUE1,
  DECODE(seqnum, 1, t.STARTTIME,cnt,t.ENDTIME) timestamp,
  '090.'
  || t2.APP
  || '.BATCH' tagname
FROM
  (SELECT t.*,
    row_number() over(partition BY t.ID1, t.PLANT_UNIT order by t.STARTTIME) AS seqnum,
    COUNT(*) over(partition BY t.ID1, t.PLANT_UNIT) cnt
  FROM tb_steps t
  ) t, tb_equipments t2
WHERE t2.plant_unit = t.plant_unit
  AND   (t.seqnum    = 1
      or t.seqnum        = t.cnt)
AND (T.STARTTIME  > '15-jul-2013'
AND t.ENDTIME    < '15-aug-2013') ;

完全未经测试....

希望有帮助。

于 2014-02-21T00:47:01.100 回答