簡體   English   中英

BIRT Designer select CASE THEN 內的語句

[英]BIRT Designer select statment inside 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, LOCATE('-',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, LOCATE('-',MXZINVTRANS.REFDOC)-1)) "

首先解釋一下,REFODC 的值類似於 4500038258-R2-120,使用 LEFT 我得到這個數字 4500038258,我在表 PO 中查看它等於 PONUM,然后我將 VENDOR 打印為數字 114263,例如。

問題在這里,我在這里有錯誤,但如果我直接寫 MXZINVTRANS.REFDOC 編號 4500038258 則沒有錯誤。 另外,如果只打印 substring 的 REFDOC 值,我在報告中得到正確的 substring 並且沒有錯誤,所以問題可能出在這里?

屏幕

假設您已經轉儲生成的 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, LOCATE('-',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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM