select 
bank.BANKNAME,--银行名称
sum(case when b.CHANGESTATUS=223 then 1 else 0 end) as overpersonnum,--销户人数
sum(case when b.CHANGESTATUS<>223 then 1 else 0 end) as personnum--正常和封存人数
from torg_personalaccount a
inner join torg_cust_account c on c.custaccountid=a.custaccountid
inner join torg_organ_bank bank on bank.ORGAN_BANKID=c.ORGAN_BANKID
inner join TGP_STATUSCHANGEDETAIL b on b.personalaccountid=a.personalaccountid
inner join 
(
select max(STATUSCHANGEDETAILID) as STATUSCHANGEDETAILID from TGP_STATUSCHANGEDETAIL 
where month<='201106'--查询时间,格式是年月
group by personalaccountid
) x on x.STATUSCHANGEDETAILID=b.STATUSCHANGEDETAILID
where b.SHIFTID is null and b.OUTID is null and b.INID is null
and a.ORGANID=2--机构ID
group by bank.BANKNAME这个语句在oracle里执行木问题,但是在db2里执行就报错如下的错误:
16:20:03  [SELECT - 0 row(s), 0.000 secs]  [Error Code: -104, SQL State: 42601]  [SQL0104] 标记TORG_PERSONALACCOUNT无效。有效标记是, FROM INTO。 原因. . . . . :   在标记TORG_PERSONALACCOUNT检测到语法错误。标记TORG_PERSONALACCOUNT不是有效的标记。有效标记的部分列表为, FROM INTO。此列表假定至标记为止语句仍是正确的。语句可能在较早处已有错误,但至此标记为止,语句的语法仍是有效的。恢复. . . . . :   执行下列其中一项或多项操作然后重试该请求:--验证标记TORG_PERSONALACCOUNT区域内的SQL语句。更正此语句。错误可能与欠缺逗号、引号、拼错字或与子句顺序有关。--如果错误标记是<语句结束>,则因SQL语句并未以有效子句结束,请更正。
... 1 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec [0 successful, 0 warnings, 1 errors]
   有谁知道这是怎么回事么

解决方案 »

  1.   


    db2  怎么到oracle 来了。
      

  2.   

    DB2和oracle的语法上还是有区别的,不知道你的表要不要加上数据库的前缀。可以参考一下这个DB2报错信息:
    http://www.knowsky.com/538581.html
      

  3.   

    -104 42601 SQL语句中遇到非法符号 资料引用:http://www.knowsky.com/538581.html
      

  4.   

    sum(case when b.CHANGESTATUS=223 then 1 else 0 end) as overpersonnum,--销户人数
    sum(case when b.CHANGESTATUS<>223 then 1 else 0 end) as personnum--正常和封存人数
    223是不是要加单引号啊?