【发布时间】:2014-09-26 14:19:53
【问题描述】:
我知道这曾经是这里的一个话题,但我仍然无法在工会中进行分组。我看过这里: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之前需要有一个结束括号。解决此问题后,您对列的引用需要工作(引用封装在派生表中的别名)。 -
谢谢帕特里克,通过引用您所说的结束组和排序的列?
-
例如,
W.WORK_ORDER_NO(查询块一),应该以它来自的派生表的名称作为前缀(但您没有分配一个)或没有限定(因为一切都来自您的派生表)。 -
顺便说一句,帮自己一个忙,使用检测这些配对的工具(例如好的文本编辑器)或开发工具。