为什么我的查询失败并显示 SQLCODE = -420?

Why is my query failing with SQLCODE = -420?

我能得到一些帮助吗?我将复制代码和错误。我查了错误代码

(DB2 SQL Error: SQLCODE=-420, SQLSTATE=22018, SQLERRMC=BOOLEAN)

但是我不明白什么不符合功能要求?我只是想把这些表拉出来,满足一定条件的时候重命名ACH_ORIGINATION.DESCRIPTION,然后过滤掉不符合要求的。我也想按 DESCRIPTION 分组,但我想先让这部分工作。

SELECT
    ACH_ORIGINATION.COMPANY_SERIAL,
    ACH_ORIGINATION.NAME,
    ACH_ORIGINATION.AMOUNT,
    ACH_ORIGINATION.NEXT_POSTING_DATE,
    CASE ACH_ORIGINATION.DESCRIPTION
        WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%J & J%' THEN 'J & J Electric'
        WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%DeCleene%' THEN 'DeCleene'
        WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%Arab%' THEN 'Arab'
        WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%Clifford%' THEN 'Clifford Signs'
        ELSE 'Nothing'
    END AS DESCRIPTION
FROM
    CORE.ACH_ORIGINATION AS ACH_ORIGINATION
WHERE
    ACH_ORIGINATION.NEXT_POSTING_DATE IS NOT NULL AND
    DESCRIPTION <> 'Nothing'

错误:

net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.JRException: Error executing SQL statement for : ACH32Origination32Report_TableDataset_1579792666108_134237 at com.jaspersoft.studio.editor.preview.view.control.ReportControler.fillReport(ReportControler.java:466) at com.jaspersoft.studio.editor.preview.view.control.ReportControler.access(ReportControler.java:441) at com.jaspersoft.studio.editor.preview.view.control.ReportControler.run(ReportControler.java:333) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) Caused by: net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.JRException: Error executing SQL statement for : ACH32Origination32Report_TableDataset_1579792666108_134237 at net.sf.jasperreports.engine.fill.JRFillSubreport.prepare(JRFillSubreport.java:809) at net.sf.jasperreports.components.table.fill.FillTableSubreport.prepareSubreport(FillTableSubreport.java:156) at net.sf.jasperreports.components.table.fill.FillTable.prepare(FillTable.java:400) at net.sf.jasperreports.engine.fill.JRFillComponentElement.prepare(JRFillComponentElement.java:151) at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:332) at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:384) at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:358) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillSummaryNoLastFooterSamePage(JRVerticalFiller.java:1102) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillSummary(JRVerticalFiller.java:1065) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportEnd(JRVerticalFiller.java:329) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:159) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:963) at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFiller.run(BaseFillHandle.java:120) at java.lang.Thread.run(Unknown Source) Caused by: net.sf.jasperreports.engine.JRException: Error executing SQL statement for : ACH32Origination32Report_TableDataset_1579792666108_134237 at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:240) at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1114) at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:691) at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1314) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:931) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:873) at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:665) at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59) at net.sf.jasperreports.engine.fill.AbstractThreadSubreportRunner.run(AbstractThreadSubreportRunner.java:203) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ... 1 more Caused by: com.ibm.db2.jcc.am.SqlDataException: DB2 SQL Error: SQLCODE=-420, SQLSTATE=22018, SQLERRMC=BOOLEAN, DRIVER=4.13.127 at com.ibm.db2.jcc.am.id.a(id.java:669) at com.ibm.db2.jcc.am.id.a(id.java:60) at com.ibm.db2.jcc.am.id.a(id.java:127) at com.ibm.db2.jcc.am.bo.b(bo.java:4101) at com.ibm.db2.jcc.am.bo.a(bo.java:4083) at com.ibm.db2.jcc.t4.cb.a(cb.java:835) at com.ibm.db2.jcc.t4.cb.n(cb.java:801) at com.ibm.db2.jcc.t4.cb.j(cb.java:253) at com.ibm.db2.jcc.t4.cb.d(cb.java:55) at com.ibm.db2.jcc.t4.q.c(q.java:44) at com.ibm.db2.jcc.t4.sb.j(sb.java:147) at com.ibm.db2.jcc.am.no.kb(no.java:2112) at com.ibm.db2.jcc.am.oo.b(oo.java:4407) at com.ibm.db2.jcc.am.oo.fc(oo.java:743) at com.ibm.db2.jcc.am.oo.executeQuery(oo.java:713) at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:233) ... 11 more

根据评论,像这样修正 CASE 表达式:

CASE    WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%J & J%' THEN 'J & J Electric'
        WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%DeCleene%' THEN 'DeCleene'
        WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%Arab%' THEN 'Arab'
        WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%Clifford%' THEN 'Clifford Signs'
        ELSE 'Nothing'
END AS DESCRIPTION

其实还是post一个新问题比较好,如果你原来的问题已经解决了,现在又有新问题了...
GROUP BY 的多个问题。您可以 运行 下面的查询来玩弄表达式。

1) 您必须在 GROUP BY 列表中未出现但在 SELECT 列表中使用的列上使用某些聚合函数。如果您取消注释掉的第一行,并注释掉下一行(使用 MAX 函数),您将得到 SQLCODE=-119。

2) GROUP BY 子句中的意外/错误表达式。
您应该在 group by 子句中使用相同的 case 表达式,而不是原始的 DESCRIPTION 列。如果您取消注释 --DESCRIPTION 行并注释掉 GROUP BY 列表中的 CASE 表达式,您可能 "suddenly" 意识到,您在DESCRIPTION 列。这是因为您首先按 DESCRIPTION 中的原始值分组,然后在 CASE 表达式中处理分组值。

SELECT
    --ACH_ORIGINATION.NEXT_POSTING_DATE,
    MAX(ACH_ORIGINATION.NEXT_POSTING_DATE) AS NEXT_POSTING_DATE,
    CASE 
        WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%J & J%' THEN 'J & J Electric'
        WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%DeCleene%' THEN 'DeCleene'
        WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%Arab%' THEN 'Arab'
        WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%Clifford%' THEN 'Clifford Signs'
        ELSE 'Nothing'
    END AS DESCRIPTION
, COUNT(1) CNT    
FROM 
(
VALUES 
  (CURRENT DATE - 1, 'Arab1') 
, (CURRENT DATE - 2, 'Arab2')  
) ACH_ORIGINATION (NEXT_POSTING_DATE, DESCRIPTION)
WHERE
    ACH_ORIGINATION.NEXT_POSTING_DATE IS NOT NULL AND
    DESCRIPTION <> 'Nothing'
GROUP BY 
--DESCRIPTION
    CASE 
        WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%J & J%' THEN 'J & J Electric'
        WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%DeCleene%' THEN 'DeCleene'
        WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%Arab%' THEN 'Arab'
        WHEN ACH_ORIGINATION.DESCRIPTION LIKE '%Clifford%' THEN 'Clifford Signs'
        ELSE 'Nothing'
    END
;