На самом деле, лучше написать новый вопрос, если ваша первоначальная проблема решена, и теперь у вас есть новая проблема ...
Множество проблем с 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
;