不是 GROUP BY 表达式 - 聚合函数中的 CASE
not a GROUP BY expression - CASE in aggregate function
我正尝试像往常一样按语句分组,但出现 ORA-00979 错误。 运行 该脚本需要做什么?感谢您的帮助。
错误:00979
SELECT
e."LastName", e."FirstName", e.ID, h."Name", h."Code", h."Loop", l."Code",
SUM(("LoomRecord"."TotalRotations" -
CASE
WHEN lrPrev."Type"='P' THEN lrPrev."TotalRotations"
ELSE 0
END)) AS TotalRotations,
SUM(("LoomRecord"."TotalRotations" -
CASE
WHEN lrPrev."Type"='P' THEN lrPrev."TotalRotations"
ELSE 0
END)*COALESCE(pi."UsedRuns",1)/COALESCE(pr."UsedRuns",1)*es.WagePerRotation) AS WageTotal
FROM "EmployeeShifts" es
INNER JOIN "LoomRecord" ON "LoomRecord"."LoomID" = es.LoomID AND es.StartTime<"LoomRecord"."Time" AND "LoomRecord"."Time"<=es.EndTime
INNER JOIN "LoomRecord" lrPrev ON lrPrev.ID =
(
SELECT DISTINCT FIRST_VALUE(ID) OVER (ORDER BY lrLast."Time" DESC,lrLast."ID" DESC)
FROM "LoomRecord" lrLast
WHERE lrLast."LoomID"="LoomRecord"."LoomID" AND (lrLast."Time"<"LoomRecord"."Time" OR (lrLast."ContractItemID"="LoomRecord"."ContractItemID" AND lrLast."Time"="LoomRecord"."Time" AND lrLast."ID"<"LoomRecord"."ID"))
)
LEFT JOIN "LoomRawRecord" lrr ON lrr."LoomID"="LoomRecord"."LoomID" AND lrr."Time"="LoomRecord"."Time"
LEFT JOIN "PlanItem" pi ON pi."PlanID"=lrr."ItemID0" AND ("LoomRecord"."Rank" IS NULL OR pi."ContractItemRank" = "LoomRecord"."Rank")
LEFT JOIN "Plan" p ON p."ID"=lrr."ItemID0"
LEFT JOIN (SELECT pi."PlanID", SUM("UsedRuns") AS "UsedRuns" FROM "PlanItem" pi GROUP BY pi."PlanID") pr ON pr."PlanID"=lrr."ItemID0"
LEFT JOIN "ContractItem" ci ON ci."ContractID"=COALESCE(pi."ContractID","LoomRecord"."ContractID") AND ci."Rank"=COALESCE(pi."ContractItemRank","LoomRecord"."Rank")
LEFT JOIN "Loom" l ON l.ID=es.LoomID
LEFT JOIN "Hall" h ON h.ID=l."HallID"
LEFT JOIN "Employee" e ON e.ID=es.EmployeeID
WHERE es.StartTime > TO_DATE('1.11.2020') - 1 AND es.EndTime < TO_DATE('30.11.2020') + 1
group by e."LastName", e."FirstName", e.ID, h."Name", h."Code", h."Loop", l."Code"
ORDER BY l."Code",es.EmployeeID,"LoomRecord"."Time",ci."ContractID",ci."Code";
您的查询使用 group by
子句,因此您不能 order by
未在此处说明的列(例如 es.EmployeeID
),因为这些列实际上不在 [= 的输出中10=] 处理查询期间的子句。
我正尝试像往常一样按语句分组,但出现 ORA-00979 错误。 运行 该脚本需要做什么?感谢您的帮助。 错误:00979
SELECT
e."LastName", e."FirstName", e.ID, h."Name", h."Code", h."Loop", l."Code",
SUM(("LoomRecord"."TotalRotations" -
CASE
WHEN lrPrev."Type"='P' THEN lrPrev."TotalRotations"
ELSE 0
END)) AS TotalRotations,
SUM(("LoomRecord"."TotalRotations" -
CASE
WHEN lrPrev."Type"='P' THEN lrPrev."TotalRotations"
ELSE 0
END)*COALESCE(pi."UsedRuns",1)/COALESCE(pr."UsedRuns",1)*es.WagePerRotation) AS WageTotal
FROM "EmployeeShifts" es
INNER JOIN "LoomRecord" ON "LoomRecord"."LoomID" = es.LoomID AND es.StartTime<"LoomRecord"."Time" AND "LoomRecord"."Time"<=es.EndTime
INNER JOIN "LoomRecord" lrPrev ON lrPrev.ID =
(
SELECT DISTINCT FIRST_VALUE(ID) OVER (ORDER BY lrLast."Time" DESC,lrLast."ID" DESC)
FROM "LoomRecord" lrLast
WHERE lrLast."LoomID"="LoomRecord"."LoomID" AND (lrLast."Time"<"LoomRecord"."Time" OR (lrLast."ContractItemID"="LoomRecord"."ContractItemID" AND lrLast."Time"="LoomRecord"."Time" AND lrLast."ID"<"LoomRecord"."ID"))
)
LEFT JOIN "LoomRawRecord" lrr ON lrr."LoomID"="LoomRecord"."LoomID" AND lrr."Time"="LoomRecord"."Time"
LEFT JOIN "PlanItem" pi ON pi."PlanID"=lrr."ItemID0" AND ("LoomRecord"."Rank" IS NULL OR pi."ContractItemRank" = "LoomRecord"."Rank")
LEFT JOIN "Plan" p ON p."ID"=lrr."ItemID0"
LEFT JOIN (SELECT pi."PlanID", SUM("UsedRuns") AS "UsedRuns" FROM "PlanItem" pi GROUP BY pi."PlanID") pr ON pr."PlanID"=lrr."ItemID0"
LEFT JOIN "ContractItem" ci ON ci."ContractID"=COALESCE(pi."ContractID","LoomRecord"."ContractID") AND ci."Rank"=COALESCE(pi."ContractItemRank","LoomRecord"."Rank")
LEFT JOIN "Loom" l ON l.ID=es.LoomID
LEFT JOIN "Hall" h ON h.ID=l."HallID"
LEFT JOIN "Employee" e ON e.ID=es.EmployeeID
WHERE es.StartTime > TO_DATE('1.11.2020') - 1 AND es.EndTime < TO_DATE('30.11.2020') + 1
group by e."LastName", e."FirstName", e.ID, h."Name", h."Code", h."Loop", l."Code"
ORDER BY l."Code",es.EmployeeID,"LoomRecord"."Time",ci."ContractID",ci."Code";
您的查询使用 group by
子句,因此您不能 order by
未在此处说明的列(例如 es.EmployeeID
),因为这些列实际上不在 [= 的输出中10=] 处理查询期间的子句。