Почему мой запрос не работает с SQLCODE = -420?

Могу ли я получить некоторую помощь с этим? Я скопирую код, а также ошибку. Я посмотрел код ошибки

(Ошибка SQL DB2: SQLCODE=-420, SQLSTATE=22018, SQLERRMC=BOOLEAN)

но я не понимаю, что не соответствует требованиям функции? Я просто пытаюсь вытащить эти таблицы, переименовать ACH_ORIGINATION.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'

Ошибка:

В комментариях исправьте выражение CASE следующим образом:


person cmurphy    schedule 23.01.2020    source источник
comment
Синтаксис выражения case colum when value... Просто выполните case when condition.   -  person nfgl    schedule 23.01.2020
comment
Спасибо за комментарии, теперь я понял, где была ошибка.   -  person jarlh    schedule 23.01.2020
comment
Сотрите мой предыдущий комментарий о том, что все они помечены как «Ничего» - теперь он работает правильно, однако теперь я получаю сообщение об ошибке, когда пытаюсь сгруппировать по ОПИСАНИЮ. Все, что я сделал, это добавил GROUP BY DESCRIPTION после предложения WHERE, и теперь я получаю ошибку SQL DB2: SQLCODE=-119, SQLSTATE=42803, SQLERRMC=NEXT_POSTING_DATE, DRIVER=3.58.82.   -  person cmurphy    schedule 23.01.2020


Ответы (2)


На самом деле, лучше опубликовать новый вопрос, если ваша первоначальная проблема решена, а теперь у вас возникла новая проблема...
Многочисленные проблемы с

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
. Вы можете запустить приведенный ниже запрос, чтобы поиграть с выражениями.

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
person mao    schedule 23.01.2020
comment
net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.JRException: Ошибка выполнения оператора SQL для: ACH32Origination32Report_TableDataset_1579792666108_134237 в com.jaspersoft.studio.editor.preview.view. control.ReportControler.fillReport(ReportControler.java:466) в com.jaspersoft.studio.editor.preview.view.control.ReportControler.access$18(ReportControler.java:441) в com.jaspersoft.studio.editor.preview.view .control.ReportControler$4.run(ReportControler.java:333) в org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) Вызвано: net.sf.jasperreports.engine.JRRuntimeException: net. sf.jasperreports.engine.JRException: ошибка при выполнении инструкции SQL для: ACH32Origination32Report_TableDataset_1579792666108_134237 в net.sf.jasperreports.engine.fill.JRFillSubreport.prepare(JRFillSubreport.java:809) в net.sf.fillSubreports.Filljasperreports.Fillcomponents. .prepareSubreport(F illTableSubreport.java:156) по адресу net.sf.jasperreports.components.table.fill.FillTable.prepare(FillTable.java:400) по адресу net.sf.jasperreports.engine.fill.JRFillComponentElement.prepare(JRFillComponentElement.java:151) в net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:332) в net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:384) в net.sf.jasperreports.engine .fill.JRFillBand.fill(JRFillBand.java:358) в сети.sf.jasperreports.engine.fill.JRVerticalFiller.fillSummaryNoLastFooterSamePage(JRVerticalFiller.java:1102) в сети.sf.jasperreports.engine.fill.JRVerticalFiller.fillSummary(JRVerticalFiller .java:1065) в сети.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportEnd(JRVerticalFiller.java:329) в сети.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:159) в сети. 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(неизвестный источник) Причина: net.sf.jasperreports.engine.JRException: ошибка выполнения Оператор SQL для: ACH32Origination32Report_TableDataset_1579792666108_134237 в net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:240) в net.sf.jasperreports.engine.fill sf.jasperreports.engine.fill. JRFillDataset.initDatasource(JRFillDataset.java:691) по адресу net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1314) по адресу net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java: 931) в net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:873) в net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:665) в net.sf.jasperreports .engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59) в net.sf.jasperreports.engine.fill.AbstractThreadSubreportRunner.run(AbstractThreadSubreportRunner.java:203) в java.util.concurrent.ThreadPoolExecutor.runWorker(неизвестный источник) at java.util.concurrent.ThreadPoolExecutor$Worker.run(неизвестный источник) ... еще 1 Причина: com.ibm.db2.jcc.am.SqlDataException: Ошибка SQL DB2: SQLCODE=-420, SQLSTATE=22018, SQLERRMC =BOOLEAN, DRIVER=4.13.127 в com.ibm.db2.jcc.am.id.a(id.java:669) в com.ibm.db2.jcc.am.id.a(id. java:60) на com.ibm.db2.jcc.am.id.a(id.java:127) на com.ibm.db2.jcc.am.bo.b(bo.java:4101) на com.ibm .db2.jcc.am.bo.a(bo.java:4083) в com.ibm.db2.jcc.t4.cb.a(cb.java:835) в com.ibm.db2.jcc.t4.cb .n(cb.java:801) в com.ibm.db2.jcc.t4.cb.j(cb.java:253) в com.ibm.db2.jcc.t4.cb.d(cb.java:55 ) в com.ibm.db2.jcc.t4.q.c(q.java:44) в com.ibm.db2.jcc.t4.sb.j(sb.java:147) в com.ibm.db2.jcc. am.no.kb(no.java:2112) по адресу com.ibm.db2.jcc.am.oo.b(oo.java:4407) по адресу com.ibm.db2.jcc.am.oo.fc(oo. java:743) в com.ibm.db2.jcc.am.oo.executeQuery(oo.java:713) в net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:233) ... 11 более - person cmurphy; 23.01.2020

1) Вы должны использовать некоторую агрегатную функцию для столбца, который не представлен в списке GROUP BY, но используется в списке SELECT. Если вы раскомментируете закомментированную 1-ю строку и закомментируете следующую строку (с помощью функции MAX), вы получите SQLCODE=-119.

2) Непредвиденное/неправильное выражение в предложении GROUP BY.
Следует использовать то же выражение case в предложении group by, а не исходный столбец DESCRIPTION. Если вы раскомментируете закомментированную строку --DESCRIPTION и закомментируете выражение CASE в списке GROUP BY, вы можете "внезапно" понять, что вы получаете 2 группы с одинаковым значением в столбце DESCRIPTION. Это связано с тем, что вы сначала группируете исходное значение в DESCRIPTION, а затем обрабатываете групповое значение в выражении CASE.

Вы смешиваете синтаксис, либо GROUP BY, либо GROUP BY

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
;
person Mark Barinstein    schedule 24.01.2020