为什么我的查询失败并显示 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
;
我能得到一些帮助吗?我将复制代码和错误。我查了错误代码
(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
;