【发布时间】:2010-12-22 04:05:52
【问题描述】:
我有一个查询,它获取个人员工详细信息,然后根据位置汇总总计,最后是总计。在第一个选择语句中我需要取 max(column9),但在联合中我需要取 sum( column9).我收到错误“数据类型不匹配”。以下是查询:
SELECT COLUMN1 AS LASTNAME,
COLUMN2 AS FIRSTNAME,
COLUMN3 AS LOCATION,
SUM(COLUMN4) AS ACTIVITYNM1,
SUM(COLUMN5) AS ACTIVITYNM2,
SUM(COLUMN6) AS ACTIVITYNM3,
SUM(COLUMN7) AS ACTIVITYNM4,
SUM(COLUMN8) AS ACTIVITYNM5,
MAX(COLUMN9) AS REG_HRS,
MAX(COLUMN10) AS OT_HRS,
MAX(COLUMN11) AS TOTAL_HRS,
SUM(COLUMN12) AS PRODUCTIVITY_PERCENTAGE,
COLUMN13 AS FULL_LOCATION
FROM TABLE(ACTY_COL(V_STARTDATE,V_ENDDATE))
GROUP BY COLUMN1, COLUMN2, COLUMN3, COLUMN13
UNION
SELECT NULL,
NULL,
CONCAT(SUBSTR(COLUMN3,3,3),' Total') AS LOCATION,
SUM(COLUMN4) AS ACTIVITYNM1,
SUM(COLUMN5) AS ACTIVITYNM2,
SUM(COLUMN6) AS ACTIVITYNM3,
SUM(COLUMN7) AS ACTI,
VITYNM4,
SUM(COLUMN8) AS ACTIVITYNM5,
SUM(COLUMN9) AS REG_HRS,
SUM(COLUMN10) AS OT_HRS,
SUM(COLUMN11) AS TOTAL_HRS,
(SUM(COLUMN12)/COUNT(DISTINCT(COLUMN1))) AS PRODUCTIVITY_PERCENTAGE,
COLUMN13 AS FULL_LOCATION
FROM TABLE(ACTY_COL(V_STARTDATE,V_ENDDATE))
GROUP BY COLUMN3, COLUMN13
================================================ =========================================
您好,非常感谢您的所有回答。我得到了解决方案。我在第二个联合中使用子查询。我在这里粘贴代码。
SELECT
COLUMN1 AS EMPID,
COLUMN2 AS FIRSTNAME,
COLUMN3 AS LASTNAME,
COLUMN4 AS LOCATION,
SUM(COLUMN5) AS ACTIVITYNM1,
SUM(COLUMN6) AS ACTIVITYNM2,
SUM(COLUMN7) AS ACTIVITYNM3,
SUM(COLUMN8) AS ACTIVITYNM4,
SUM(COLUMN9) AS ACTIVITYNM5,
MIN(COLUMN10) AS EVENTDATE,
TO_NUMBER(COLUMN11) AS REG_HRS,
TO_NUMBER(COLUMN12) AS OT_HRS,
TO_NUMBER(COLUMN13) AS TOTAL_HRS,
SUM(COLUMN14) AS PRODUCTIVITY_PERCENTAGE
FROM
TABLE(ACTY_COL(V_STARTDATE,V_ENDDATE))
GROUP BY
COLUMN1,
COLUMN2,
COLUMN3,
COLUMN4,
COLUMN11,
COLUMN12,
COLUMN13
UNION
SELECT
NULL AS EMPID,
NULL AS LASTNAME,
NULL AS FIRSTNAME,
SUBSTR(INNER_REC.LOCATION,2,5) AS LOCATION,
SUM(INNER_REC.ACTIVITYNM1) AS ACTIVITYNM1,
SUM(INNER_REC.ACTIVITYNM2) AS ACTIVITYNM2,
SUM(INNER_REC.ACTIVITYNM3) AS ACTIVITYNM3,
SUM(INNER_REC.ACTIVITYNM4) AS ACTIVITYNM4,
SUM(INNER_REC.ACTIVITYNM5) AS ACTIVITYNM5,
MIN(INNER_REC.EVENTDATE) AS EVENTDATE,
SUM(INNER_REC.REG_HRS) AS REG_HRS,
SUM(INNER_REC.OT_HRS) AS OT_HRS,
SUM(INNER_REC.TOTAL_HRS) AS TOTAL_HRS,
SUM(INNER_REC.PRODUCTIVITY_PERCENTAGE) AS PRODUCTIVITY_PERCENTAGE
FROM
(
SELECT
COLUMN1 AS EMPID,
NULL AS LASTNAME,
NULL AS FIRSTNAME,
COLUMN4 AS LOCATION,
SUM(COLUMN5) AS ACTIVITYNM1,
SUM(COLUMN6) AS ACTIVITYNM2,
SUM(COLUMN7) AS ACTIVITYNM3,
SUM(COLUMN8) AS ACTIVITYNM4,
SUM(COLUMN9) AS ACTIVITYNM5,
MIN(COLUMN10) AS EVENTDATE,
SUM(TO_NUMBER(COLUMN11))/(SELECT COUNT(1) FROM TABLE(ACTY_COL(V_STARTDATE,V_ENDDATE)) AB WHERE AB.COLUMN4 =
CD.COLUMN4 AND AB.COLUMN1 = CD.COLUMN1) AS REG_HRS,
SUM(TO_NUMBER(COLUMN12))/(SELECT COUNT(1) FROM TABLE(ACTY_COL(V_STARTDATE,V_ENDDATE)) AB WHERE AB.COLUMN4 =
CD.COLUMN4 AND AB.COLUMN1 = CD.COLUMN1) AS OT_HRS,
SUM(TO_NUMBER(COLUMN13))/(SELECT COUNT(1) FROM TABLE(ACTY_COL(V_STARTDATE,V_ENDDATE)) AB WHERE AB.COLUMN4 =
CD.COLUMN4 AND AB.COLUMN1 = CD.COLUMN1) AS TOTAL_HRS,
SUM(COLUMN14) AS PRODUCTIVITY_PERCENTAGE
FROM
TABLE(ACTY_COL(V_STARTDATE,V_ENDDATE)) CD
GROUP BY
COLUMN4,
COLUMN1
) INNER_REC
GROUP BY
INNER_REC.LOCATION
【问题讨论】:
-
我想知道将ROLLUP 添加到 GROUP BY 是否可以让您不必使用 UNION...
-
但是我需要取两个总数。首先是根据位置的汇总总数,然后是拨款总数。上述查询还有一个联合。在这种情况下,我们可以使用 ROLLUP 吗?对不起。我在pl sql方面没有太多经验
-
代码中有些东西被塞住了——第一个查询有 13 列,第二个有 14 列。