2017-04-20 48 views
0

我试着插入一些数据到使用表和子查询的查询中。子查询是使用case子句的地方,并且出现错误:错误[HY000] [IBM] [控制台ODBC iSeries访问] [DB2 UDB] SQL0420 - CAST参数字符无效。DB2错误。通过选择查询插入到表

我只在运行插入命令时出现此错误。当我运行select命令时,没有错误。这是查询

insert into qlib.table 
select a.fieldkey, a.field2, ifnull(n.firstdate,0) as firstdate, ifnull(n.lastdate,0) as lastdate, n.totamount, n.timespan 
from mainlib.tablea a 
left join (select b.fieldkey, MIN(rtrim(b.year)||'-'||case when b.month<10 then '0'||b.month else rtrim(b.month)end) as firstdate, 
       MAX(rtrim(b.year)||'-'||case when b.month<10 then '0'||b.month else rtrim(b.month) end) as lastdate, sum(b.amount) as totamount, 
        cast(count(b.year)/12 as char(2))||' Years '||cast(count(b.year)-(count(b.year)/12)*12 as char(2))||' Months' as timespan 
      from mainlib.tableb b 
      group by b.fieldkey) n on n.fieldkey = a.fieldkey 

表b包含每月储蓄OK。子查询返回每月节省的第一年,最后一个月,总金额以及每月节省的年和月跨度,假设每个月都有节省/存款,对于每个字段关键字

子查询的cast子句有什么问题吗?当我试图使用select命令插入到qlib.table时,我再次遇到错误。

回答

0

有几件事情可能清理你的查询:

case when b.month<10 then '0'||b.month else rtrim(b.month)end可以
VARCHAR_FORMAT(b.month,'00')

cast(count(b.year)/12 as char(2))||' Years '||cast(count(b.year)-(count(b.year)/12)*12 as char(2))||' Months'改写为

VARCHAR_FORMAT(count(b.year)/12,'99')||' Years '||VARCHAR_FORMAT(count(b.year)-(count(b.year)/12)*12,'99')||' Months'

被替换