Мне нужно получить возраст клиентов и разбить результаты на категории (18–21, 22–35, 36–50 и т. д.).
Использование Pentaho Report Designer, основанного на Oracle.
Я могу получить подсчет определенного возраста, но хочу, чтобы подсчет отражал возрастные диапазоны, а не один возраст. Попытка завершить это с помощью оператора case, но постоянно получаю ошибки.
Минимальное воздействие SQL, новое для Pentaho/Oracle, новое для этого веб-сайта.
--SQL для возраста и количества.
SELECT COUNT(*), "CLIENT_TABLE"."AGE"
FROM "CLIENT_TABLE"
GROUP BY "CLIENT_TABLE"."AGE"
ORDER BY "CLIENT_TABLE"."AGE"
--Это мое выражение CASE.
CASE
WHEN "CLIENT_TABLE"."AGE" < 18 THEN 'Under 18'
WHEN "CLIENT_TABLE"."AGE" > 18 AND <= 21 THEN '19 - 21'
WHEN "CLIENT_TABLE"."AGE" > 21 AND <= 35 THEN '22 - 35'
END AS Age
Я поместил выражение CASE в предложения SELECT и WHERE, но постоянно получаю эти два сообщения об ошибках... "Ключевое слово FROM не найдено там, где ожидается" и "Отсутствует выражение".
Обновленный код выдает ошибку «не группа по выражению».
SELECT COUNT(*),
(CASE
WHEN "CLIENT_TABLE"."AGE" < 18 THEN 'Under 18'
WHEN "CLIENT_TABLE"."AGE" <= 21 THEN '18 - 21'
WHEN "CLIENT_TABLE"."AGE" <= 35 THEN '22 - 35'
WHEN "CLIENT_TABLE"."AGE" <= 50 THEN '36 - 50'
WHEN "CLIENT_TABLE"."AGE" <= 64 THEN '51 - 64'
WHEN "CLIENT_TABLE"."AGE" >= 65 THEN '65+'
END) AS AgeRange
FROM "CLIENT_TABLE"
GROUP BY (CASE
WHEN "CLIENT_TABLE"."AGE" < 18 THEN 'Under 18'
WHEN "CLIENT_TABLE"."AGE" <= 21 THEN '18 - 21'
WHEN "CLIENT_TABLE"."AGE" <= 35 THEN '22 - 35'
WHEN "CLIENT_TABLE"."AGE" <= 50 THEN '36 - 50'
WHEN "CLIENT_TABLE"."AGE" <= 64 THEN '51 - 64'
WHEN "CLIENT_TABLE"."AGE" >= 65 THEN '65+'
END)
ORDER BY "CLIENT_TABLE"."AGE"
case
выражение не утверждение. Кроме того, вы имеете что-то против 18-летних? - person Gordon Linoff   schedule 14.08.2019