Вам не нужен подзапрос;если вы хотите подсчитать для каждой комбинации значений, группируйте их и агрегируйте на этом уровне;что-то вроде:
SELECT
t1.order_date,
t1.p_category,
CASE
WHEN ( t1.issue_grp = 1 ) THEN '1'
ELSE '2/3 '
END AS issue_group,
t1.srt AS srt_level,
COUNT(*) AS total_orders
FROM
database.t_con t1
WHERE
t1.order_date = TO_DATE ( '&Enter_Date_YYYYMM', 'YYYYMM' )
GROUP BY
t1.p_category,
CASE
WHEN ( t1.issue_grp = 1 ) THEN '1'
ELSE '2/3 '
END,
t1.srt,
t1.order_date
ORDER BY
p_category,
issue_group,
srt_level,
order_date;
Вы не должны полагаться на неявное преобразование и настройки NLS для аргумента даты (предполагая, что order_date
на самом деле столбец даты, а не строка), поэтому я использовалявный TO_DATE()
вызов, используя формат, предложенный вашим именем и приглашением переменной замещения.
Однако, это даст вам первый день указанного месяца, так как номер дня не указан.Скорее всего, вы либо захотите запросить полную дату, либо (возможно) только год / месяц, но захотите включить все дни в этом месяце, чего не будет делать IN()
, если это было вашим намерением.Это также подразумевает, что все сохраненные даты имеют свои временные интервалы, установленные на полночь, поскольку это все, что будет соответствовать.Если эти значения имеют значения, не относящиеся к полуночи, то вам также нужен диапазон для их получения.