如何解决BIRT 设计器在 CASE THEN 中选择语句
我在 BIRT Designer 4.3.1 中遇到问题,我的脚本中有 SQL 查询。
sqlText = " SELECT MXZINVTRANS.ORGID,MXZINVTRANS.ITEMSETID,MXZINVTRANS.SITEID,MXZINVTRANS.TRANSDATE,MXZINVTRANS.STORELOC,MXZINVTRANS.STORELOC_DESCRIPTION,"
+ " MXZINVTRANS.ACTUALDATE,MXZINVTRANS.TOSTORELOC,MXZINVTRANS.MAXTAB,MXZINVTRANS.TRANSGROUP,MXZINVTRANS.DOCUMENT,"
+ " MXZINVTRANS.REFDOC,MXZINVTRANS.ITEMNUM,MXZINVTRANS.CONDITIONCODE,MXZINVTRANS.ITEM_DESCRIPTION,MXZINVTRANS.COMMODITYGROUP,"
+ " MXZINVTRANS.COMMODITYGROUP_DESCRIPTION,MXZINVTRANS.ISSUEUNIT,MXZINVTRANS.TRANSTYPE,MXZINVTRANS.TRANSTYPE_DESCRIPTION,MXZINVTRANS.QUANTITY,"
+ " MXZINVTRANS.MAXIMOQUANTITY,MXZINVTRANS.UNITCOST,MXZINVTRANS.LINECOST,MXZINVTRANS.FINPER,MXZINVTRANS.CURBALBEFORE,"
+ " MXZINVTRANS.CURBALAFTER,MXZINVTRANS.COSTCENTER,MXZINVTRANS.COSTCENTER2,MXZINVTRANS.SAPUNITCOST,MXZINVTRANS.SAPPRICEUNIT,"
+ " MXZINVTRANS.SAPLINECOST,MXZINVTRANS.SAPTRANSID,"
//+ " (case MXZINVTRANS.TRANSTYPE "
//+ " WHEN 'RECEIPT' THEN 'Prejem' "
//+ " WHEN 'RETURN' THEN 'Vrač. na skl.' "
//+ " WHEN 'ISSUE' THEN 'TOREK' "
//+ " WHEN 'TRANSFER' THEN 'Izd. med skl.' "
//+ " WHEN 'INSERTITEM' THEN 'Insertitem_??' "
//+ " WHEN 'VOIDRECEIPT' THEN 'Voidreceipt_??' "
//+ " WHEN 'SHIPTRANSFER' THEN 'shiptransfer_??' "
//+ " WHEN 'SHIPCANCEL' THEN 'shipcancel_??' "
//+ " WHEN 'SHIPRECEIPT' THEN 'shipreceipts_??' "
//+ " end) as tip_trans,"
+ " (case MXZINVTRANS.TRANSTYPE_DESCRIPTION "
+ " WHEN 'Prejem pošiljke' THEN (select description from locations where locations.location=MXZINVTRANS.tostoreloc and locations.siteid=MXZINVTRANS.SITEID) "
+ " WHEN 'Prenos pošiljke' THEN (select description from locations where locations.location=MXZINVTRANS.tostoreloc and locations.siteid=MXZINVTRANS.SITEID) "
+ " WHEN 'Ident prejema' THEN (select distinct VENDOR from PO where PO.PONUM=left(MXZINVTRANS.REFDOC,LOCATE('-',MXZINVTRANS.REFDOC)-1)) "
//+ " WHEN 'Ident vračila' THEN (select distinct NAME from COMPANIES where COMPANIES.COMPANY=(select distinct VENDOR from PO where PO.PONUM=left(MXZINVTRANS.REFDOC,MXZINVTRANS.REFDOC)-1) and PO.SITEID=MXZINVTRANS.SITEID)) "
+ " end) as opis_storeloc "
//+ " (select description from locations where locations.location=MXZINVTRANS.tostoreloc and locations.siteid=MXZINVTRANS.SITEID) as opis_storeloc "
+ " FROM MXZINVTRANS "
// Include the Maximo where clause
//+ " where " + params["where"]
//+ " and invbalances.itemnum = '2000049451' "
//+ " and invbalances.itemnum like '2000000%' "
+ " where 1=1 "
+ " and(( trunc(MXZINVTRANS.TRANSDATE) ) <= TO_DATE ('" + params["datum_do"] + "','YYYY-MM-DD') and ( trunc(MXZINVTRANS.TRANSDATE) ) >= TO_DATE ('" + params["datum_od"] + "','YYYY-MM-DD'))"
+ storeroomwhere
+ blagskupinawhere
+ itemwhere
+ tipwhere
//+ " and invbalances.itemnum ='2000049451' "
//+ " and siteid='6000'"
//+ " order by po.ponum "
;
maximoDataSet.setQuery(sqlText);
这里可能是主要问题:
+ " WHEN 'Ident prejema' THEN (select distinct VENDOR from PO where PO.PONUM=left(MXZINVTRANS.REFDOC,MXZINVTRANS.REFDOC)-1)) "
首先解释一下,REFODC 的值类似于 4500038258-R2-120,使用 LEFT 我得到这个数字 4500038258,我在表 PO 中查看了它,其中等于 PONUM,然后我将 VENDOR 打印为数字 114263,例如.
问题就在这里,我在这里有错误,但是如果我直接写 MXZINVTRANS.REFDOC number 4500038258 则没有错误。另外,如果只打印 REFDOC 值的这个子字符串,我会在报告时得到正确的子字符串并且没有错误,所以问题可能出在这里?
解决方法
假设您已经转储了生成的 SQL 语句并在 BIRT 之外成功测试了它,请记住,对于每个数据集参数,您都需要在语句中出现相应的绑定变量。
例如,如果你的数据集有两个数据集参数,你需要正好两个绑定变量(语法是依赖于数据库的,JDBC标准?
应该为每个数据库工作。
如果这些数字不匹配,则会导致错误。
,我解决了一些问题。它的工作,但我有以下问题:
+ " case "
+ " WHEN MXZINVTRANS.TOSTORELOC IS NULL "
+ " THEN case WHEN MXZINVTRANS.TRANSTYPE_DESCRIPTION='Izdaja' "
+ " THEN case WHEN MXZINVTRANS.DOCUMENT LIKE '%-%' "
+ " THEN left(MXZINVTRANS.DOCUMENT,LOCATE('-',MXZINVTRANS.DOCUMENT)-1) "
+ " ELSE MXZINVTRANS.DOCUMENT "
+ " END "
+ " END "
+ " THEN case WHEN MXZINVTRANS.TRANSTYPE_DESCRIPTION='Ident prejema' "
+ " THEN (select distinct VENDOR from PO where PO.PONUM=MXZINVTRANS.DOCUMENT) "
+ " END "
+ " ELSE "
+ " MXZINVTRANS.TOSTORELOC "
+ " END "
+ " AS TOSTORELOC"
当我像这样使用它时会出现错误,当我只使用蓝色圆圈中的代码而红色圆圈中的代码有效时。
+ " case "
+ " WHEN MXZINVTRANS.TOSTORELOC IS NULL "
+ " THEN case WHEN MXZINVTRANS.TRANSTYPE_DESCRIPTION='Izdaja' "
+ " THEN case WHEN MXZINVTRANS.DOCUMENT LIKE '%-%' "
+ " THEN left(MXZINVTRANS.DOCUMENT,MXZINVTRANS.DOCUMENT)-1) "
+ " ELSE MXZINVTRANS.DOCUMENT "
+ " END "
+ " END "
+ " ELSE "
+ " MXZINVTRANS.TOSTORELOC "
+ " END "
+ " AS TOSTORELOC"
如果我使用红色圆圈中的代码而蓝色圆圈中的代码也可以工作。
+ " case "
+ " WHEN MXZINVTRANS.TOSTORELOC IS NULL "
+ " THEN case WHEN MXZINVTRANS.TRANSTYPE_DESCRIPTION='Ident prejema' "
+ " THEN (select distinct VENDOR from PO where PO.PONUM=MXZINVTRANS.DOCUMENT) "
+ " END "
+ " ELSE "
+ " MXZINVTRANS.TOSTORELOC "
+ " END "
+ " AS TOSTORELOC"
有什么建议为什么不一起工作吗?
,我在 SQuirrel 中尝试过,但我不明白为什么会出现这种语法错误?
这不起作用:
+ " (case WHEN MXZINVTRANS.TOSTORELOC IS NULL "
+ " THEN case WHEN MXZINVTRANS.TRANSTYPE_DESCRIPTION='Ident prejema' "
+ " THEN (select distinct VENDOR from PO where PO.PONUM=MXZINVTRANS.DOCUMENT) "
+ " END "
+ " THEN case WHEN MXZINVTRANS.TRANSTYPE_DESCRIPTION='Ident vračila' "
+ " THEN (select distinct VENDOR from PO where PO.PONUM=MXZINVTRANS.DOCUMENT) "
+ " END "
+ " ELSE "
+ " MXZINVTRANS.TOSTORELOC "
+ " END) "
+ " AS TOSTORELOC"
这是有效的:
+ " (case WHEN MXZINVTRANS.TOSTORELOC IS NULL "
+ " THEN case WHEN MXZINVTRANS.TRANSTYPE_DESCRIPTION='Ident prejema' OR MXZINVTRANS.TRANSTYPE_DESCRIPTION='Ident vračila' "
+ " THEN (select distinct VENDOR from PO where PO.PONUM=MXZINVTRANS.DOCUMENT) "
+ " END "
+ " ELSE "
+ " MXZINVTRANS.TOSTORELOC "
+ " END) "
+ " AS TOSTORELOC"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。