Почему мой запрос не выполняется с SQLCODE = -420? - PullRequest
0 голосов
/ 23 января 2020

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

(DB2 SQL Ошибка: 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: Ошибка при выполнении оператора SQL для: ACH32Origination32Report_TableDataset_1579792666108_134237 в com.jaspersoft.studio.editor.preview.view.control *ReportControler.fillReport: .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) at org.eclipse.core.internal.jobs.Worker.run (Работник. 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. * 1032.co.port. * 1032.co.port. * 1032.pers. 80): 80. mponents.table.fill.FillTableSubreport.prepareSubreport (FillTableSubreport. java: 156) в net .sf.jasperreports.components.table.fill.FillTable.prepare (FillTable. java: 400) в net. sf.jasperreports.engine.fill. sf.jasperreports.engine.fill.JRFillBand.fill (JRFillBand. java: 384) в net .sf.jasperreports.engine.fill.JRFillBand.fill (JRFillBand. java: 358) в net. sf.jasperreports.engine.fill. sf.jasperreports.engine.fill. sf.jasperreports.engine.fill. JRBaseFiller.fill (JRBaseFiller. java: 963) в net .sf.jasperreports.engine.fill.BaseFillHandle $ ReportFiller.run (BaseFillHandle. java: 120) в java .lang.Thread.run ( Неизвестный источник). Причина: net .sf.jasperreports.engine.JRException: Ошибка при выполнении оператора SQL для: ACH32Origination32Report_TableDataset_1579792666108_134237 в net .sf.jasperreports.enas.query.Jext_JD 240) в net .sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource (JRFillDataset. java: 1114) в net .sf.jasperreports.engine.fill.JRFillDataset.initDatataset: .F ( 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) на * 10 74 * .sf.jasperreports.engine.fill. 1078 * .util.concurrent.ThreadPoolExecutor. runWorker (неизвестный источник) в java .util.concurrent.ThreadPoolExecutor $ Worker.run (неизвестный источник) ... еще 1 причина: com.ibm.db2.j cc .am.SqlDataException: DB2 SQL Ошибка: SQLCODE = -420, SQLSTATE = 22018, SQLERRMC = BOOLEAN, DRIVER = 4.13.127 на com.ibm.db2.j cc .am.id.a (id. java: 669) на com.ibm .db2.j cc .am.id.a (id. java: 60) на com.ibm.db2.j cc .am.id.a (id. java: 127) на com .ibm.db2.j cc .am.bo.b (bo. java: 4101) на com.ibm.db2.j cc .am.bo.a (bo. java: 4083) на com.ibm.db2.j cc .t4.cb.a (cb. java: 835) на com.ibm.db2.j cc .t4.cb.n (cb. java: 801) на com.ibm.db2.j cc .t4.cb.j (cb. java: 253) на com.ibm.db2.j cc .t4.cb.d (cb. java: 55) на com.ibm.db2.j cc .t4.q. c (q. java: 44) на com.ibm.db2.j cc .t4.sb.j ( sb. java: 147) на com.ibm.db2.j cc .am.no.kb (№ java: 2112) на com.ibm.db2.j cc .am.oo. b (oo. java: 4407) на com.ibm.db2.j cc .am.oo.f c (oo. java: 743) на com.ibm.db2.j cc .am.oo.executeQuery (oo. java: 713) в net .sf.jasperreports.engine.query.JRJdb cQueryExecuter.createDatasource (JRJdbcQueryExecuter. java: 233) ... еще 11

Ответы [ 2 ]

2 голосов
/ 23 января 2020

В комментариях исправьте выражение 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
0 голосов
/ 24 января 2020

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

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

2) Непредвиденное / неправильное выражение в предложении GROUP BY.
Вы должны использовать то же выражение case в предложении group by, а не исходный столбец DESCRIPTION. Если вы раскомментируете закомментированную строку --DESCRIPTION и закомментируете выражение CASE в списке GROUP BY, вы можете «внезапно» осознать, что вы получаете 2 группы с одинаковым значением в столбце 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
;
...