Я знаю, что это была тема здесь раньше, но у меня все еще возникают проблемы с группировкой внутри профсоюзов. Я смотрел здесь: Grouping and Joining a Unioned Table. Having Problems среди других и до сих пор смущен относительно того, что делать со скобкой. Вот мой код:Проблемы с объединением и группировкой
SELECT
W.WORK_ORDER_NO,
W.WORK_CLASS,
SD.WORK_ORDER_TASK_NO,
sd.ATTRIBUTE_VALUE"Outage Type",
sd2.attribute_value"Total Time Water Off",
WT.TASK_STATUS,
wt.area,
wt.creation_date,
sd3.attribute_value"Homes Affected",
sd4.attribute_value"Businesses Affected",
sum(sm.CT_REGULAR_HOURS)"Reg Hours",
sum(sm.CT_PREMIUM_HOURS)"OT Hours"
FROM
(
SELECT
W.WORK_ORDER_NO,
W.WORK_CLASS,
SD.WORK_ORDER_TASK_NO,
sd.ATTRIBUTE_VALUE"Outage Type",
sd2.attribute_value"Total Time Water Off",
WT.TASK_STATUS,
wt.area,
wt.creation_date,
sd3.attribute_value"Homes Affected",
sd4.attribute_value"Businesses Affected",
sm.CT_REGULAR_HOURS"Reg Hours",
sm.CT_PREMIUM_HOURS"OT Hours"
FROM
SA_WORK_ORDER W,
SA_WORK_ORDER_TASK WT,
SA_SERVICE_HISTORY_DETAILS SD,
SA_SERVICE_HISTORY_DETAILS SD2,
SA_SERVICE_HISTORY_DETAILS SD3,
SA_SERVICE_HISTORY_DETAILS SD4,
smu_transactions sm
WHERE
SD.SPECIFICATION_CATEGORY = 'WATER OUTAGE'
AND W.WORK_ORDER_NO = WT.WORK_ORDER_NO
AND
(
WT.WORK_ORDER_NO = SD.WORK_ORDER_NO
AND WT.WORK_ORDER_TASK_NO = SD.WORK_ORDER_TASK_NO
)
AND
(
sd.work_order_no = sd2.work_order_no
AND sd.work_order_task_no = sd2.work_order_task_no
)
AND
(
sd.work_order_no = sd3.work_order_no
AND sd.work_order_task_no = sd3.work_order_task_no
)
AND
(
sd.work_order_no = sd4.work_order_no
AND sd.work_order_task_no = sd4.work_order_task_no
)
AND SD.SPECIFICATION_CATEGORY = 'WATER OUTAGE'
AND sd.attribute_desc = 'Type of Outage'
AND SD2.SPECIFICATION_CATEGORY = 'WATER OUTAGE'
AND sd2.attribute_desc = 'Total Time Water Off'
AND SD3.SPECIFICATION_CATEGORY = 'WATER OUTAGE'
AND sd3.attribute_desc = 'Number of Homes affected'
AND SD4.SPECIFICATION_CATEGORY = 'WATER OUTAGE'
AND sd4.attribute_desc = 'Number of Businesses affected'
AND WT.TASK_STATUS != 'CANCELED'
AND sm.transaction_type = 'CT'
UNION ALL
SELECT
W.WORK_ORDER_NO,
W.WORK_CLASS,
SD.WORK_ORDER_TASK_NO,
sd.ATTRIBUTE_VALUE"Outage Type",
sd2.attribute_value"Total Time Water Off",
WT.TASK_STATUS,
wt.area,
wt.creation_date,
sd3.attribute_value"Homes Affected",
sd4.attribute_value"Businesses Affected",
SUM(sm.CT_REGULAR_HOURS)"Reg Hours",
SUM(sm.CT_PREMIUM_HOURS)"OT Hours"
FROM
( SELECT
W.WORK_ORDER_NO,
W.WORK_CLASS,
SD.WORK_ORDER_TASK_NO,
sd.ATTRIBUTE_VALUE"Outage Type",
sd2.attribute_value"Total Time Water Off",
WT.TASK_STATUS,
wt.area,
wt.creation_date,
sd3.attribute_value"Homes Affected",
sd4.attribute_value"Businesses Affected",
sm.CT_REGULAR_HOURS"Reg Hours",
sm.CT_PREMIUM_HOURS"OT Hours"
FROM
SA_WORK_HISTORY W,
SA_WORK_HISTORY_TASK WT,
SA_WORK_HISTORY_SERVICE_DETAIL SD,
SA_WORK_HISTORY_SERVICE_DETAIL SD2,
SA_WORK_HISTORY_SERVICE_DETAIL SD3,
SA_WORK_HISTORY_SERVICE_DETAIL SD4,
smu_transactions sm
WHERE
SD.SPECIFICATION_CATEGORY = 'WATER OUTAGE'
AND W.WORK_ORDER_NO = WT.WORK_ORDER_NO
AND
(
WT.WORK_ORDER_NO = SD.WORK_ORDER_NO
AND WT.WORK_ORDER_TASK_NO = SD.WORK_ORDER_TASK_NO
)
AND
(
sd.work_order_no = sd2.work_order_no
AND sd.work_order_task_no = sd2.work_order_task_no
)
AND
(
sd.work_order_no = sd3.work_order_no
AND sd.work_order_task_no = sd3.work_order_task_no
)
AND
(
sd.work_order_no = sd4.work_order_no
AND sd.work_order_task_no = sd4.work_order_task_no
)
AND
(
sd.work_order_no = sm.WORK_ORDER_NO
AND sd.work_order_task_no = sm.work_order_task_no
)
AND SD.SPECIFICATION_CATEGORY = 'WATER OUTAGE'
AND sd.attribute_desc = 'Type of Outage'
AND SD2.SPECIFICATION_CATEGORY = 'WATER OUTAGE'
AND sd2.attribute_desc = 'Total Time Water Off'
AND SD3.SPECIFICATION_CATEGORY = 'WATER OUTAGE'
AND sd3.attribute_desc = 'Number of Homes affected'
AND SD4.SPECIFICATION_CATEGORY = 'WATER OUTAGE'
AND sd4.attribute_desc = 'Number of Businesses affected'
AND WT.TASK_STATUS != 'CANCELED'
AND sm.transaction_type = 'CT'
)
GROUP BY
sm.CT_REGULAR_HOURS,
sm.CT_PREMIUM_HOURS
ORDER BY
sd.work_order_no,
sd.WORK_ORDER_TASK_NO;
Ошибка: ORA-00907: отсутствует правая скобка 00907. 00000 - "отсутствует правая скобка" * Причина:
* Действие: Ошибка в строке: 152 Колонка : 23
Я пробовал много разных перестановок мест скобок и понял, как это должно работать, но я все еще не могу понять, где их поставить (или если это вообще проблема).
TIA за любую помощь, которую вы можете дать!
У вас должна быть конечная скобка перед 'UNION ALL'. После того, как вы исправите это, вам понадобится ссылка на столбцы (ссылаясь на псевдонимы, которые заключены в производную таблицу). –
Спасибо Патрику, указав столбцы, о которых вы говорите о концевой группе, и заказываете? – robartle
Например, 'W.WORK_ORDER_NO' (блок запроса один) должен либо иметь префикс имени производной таблицы, из которой она исходит (но вы ее не присвоили), либо без какой-либо квалификации (потому что все происходит от вашего производная таблица). –