У меня появляется всплывающее окно с синтаксической ошибкой каждый раз, когда я запускаю свой запрос.
Ошибка:
ORA-00937: not a single-group group function 00937. 00000 - "not a single-group group function"
Ниже мой код:
SELECT
d.*, >>>>SUM(L.ALLOCATED_QTY)<<<<
FROM
alc_item_loc l
RIGHT JOIN (
SELECT
c.*
FROM
store s,
(
SELECT
a.*,
b.location AS store_number
FROM
fdt_map_cluster_location b,
(
SELECT DISTINCT
ss.alloc_cluster_id,
ss.alloc_cluster_name,
ss.worksheet_id,
ss.sku
FROM
fdt_maptool_sas_data ss
WHERE
ss.sku IN (
1099866,
1099896,
1000898,
1000960,
1000988
)
AND ss.order_no IS NOT NULL
AND alloc_cluster_name NOT LIKE '%DC Cluster%'
GROUP BY
ss.alloc_cluster_id,
ss.alloc_cluster_name,
ss.worksheet_id,
ss.sku
) a
WHERE
b.cluster_id = a.alloc_cluster_id
AND b.location_type = 'S'
) c
WHERE
s.store = c.store_number
AND s.store_close_date IS NULL
AND s.district NOT IN (
997,
998,
999
)
AND s.store_open_date <= SYSDATE
) d ON l.item_id = d.sku
AND l.location_id = d.store_number
>>>GROUP BY xxxx <<<<<
Как видите, ошибка вызвана тем, что у меня есть агрегатная функция (сумма), и ее нужно сгруппировать.
Моя проблема в том, что я не знаю, нужно ли мне сгруппировать все в (D. *) или как?
Если мне нужно сгруппировать ВСЕ в (D. *), как мне это сделать правильно?
Я знаю, что это неправильный синтаксис, но, например, вот что я хочу сделать:
GROUP BY D.*
Но я не уверен, как это сгруппировать ???
Любая помощь приветствуется!
PS: «>>> <<<» нужны только для того, чтобы показать, в чем заключается моя ошибка.
@ kc2018 Большое спасибо! Я все еще работаю над процедурами отладки. Это был хороший трюк!


Лучше всего сгруппировать внутри подзапроса:
SELECT
d.*, l._sum
FROM
alc_item_loc l
RIGHT JOIN (
select l.item_id, l.location_id, SUM(L.ALLOCATED_QTY) _sum from (
SELECT
c.*
....
....
....
AND s.store_open_date <= SYSDATE
)l
group by l.item_id, l.location_id
) d ON l.item_id = d.sku
AND l.location_id = d.store_number
Да, с точки зрения синтаксиса вам необходимо включить поле данных в
selectвgroup by. Запустите запрос безsumиgroup by, чтобы увидеть возвращенные имена полей данных.