我使用的是Oracle SQL,我有两个表:
Employee:
VARCHAR VARCHAR
EMP_NUM EMP_NAME
------- --------
1 Jane
1 Jane
1 Jane
1 Jane
2 Alex
2 Alex
2 Alex
3 Danny
3 Danny
Assignment:
NUMBER FLOAT FLOAT VARCHAR
ASSIGN_NUM ASSIGN_HOURS ASSIGN_CHARGE EMP_NUM
---------- ------------ ------------- -------
1 3.5 290 1
2 2.6 68.2 3
3 2 406 3
4 4.7 541 2
5 3.3 76 1
我需要将它们组合成这样的东西:
TempTable:
VARCHAR VARCHAR FLOAT FLOAT
EMP_NUM EMP_NAME SUM_HOURS SUM_CHARGE
------- -------- --------- ----------
1 Jane 27.2 1464
2 Alex 14.1 1623
3 Danny 9.2 948.4
我尝试过使用它,但它不起作用:
SELECT
Assignment.EMP_NUM,
Employee.EMP_NAME,
SUM(Assignment.ASSIGN_HOURS) SUM_HOURS,
SUM(Assignment.ASSIGN_CHARGE) SUM_CHARGE
FROM Employee, Assignment
WHERE Employee.EMP_NUM = Assignment.EMP_NUM
GROUP BY Assignment.EMP_NUM
;
但SQL抱怨:
Error starting at line 1 in command:
SELECT
Assignment.EMP_NUM,
Employee.EMP_NAME,
SUM(Assignment.ASSIGN_HOURS) SUM_HOURS,
SUM(Assignment.ASSIGN_CHARGE) SUM_CHARGE
FROM Employee, Assignment
WHERE Employee.EMP_NUM = Assignment.EMP_NUM
GROUP BY Assignment.EMP_NUM
Error at Command Line:3 Column:5
Error report:
SQL Error: ORA-00979: not a GROUP BY expression
00979. 00000 - "not a GROUP BY expression"
*Cause:
*Action:
即使我删除了GROUP BY
行,我在Line:2 Column:5
说not a single-group group function
时收到错误。 有没有办法获得此表
答案 0 :(得分:1)
查询应该是这样的,您需要列出SELECT子句中的所有字段:
SELECT
Assignment.EMP_NUM,
Employee.EMP_LNAME,
SUM(Assignment.ASSIGN_HOURS) SUM_HOURS,
SUM(Assignment.ASSIGN_CHARGE) SUM_CHARGE
FROM Employee, Assignment
WHERE Employee.EMP_NUM = Assignment.EMP_NUM
GROUP BY Assignment.EMP_NUM,
Employee.EMP_LNAME
;
答案 1 :(得分:1)
您忘记在Employee.EMP_LNAME
条款中加入GROUP BY
。
代码应该是:
SELECT
Assignment.EMP_NUM,
Employee.EMP_LNAME,
SUM(Assignment.ASSIGN_HOURS) SUM_HOURS,
SUM(Assignment.ASSIGN_CHARGE) SUM_CHARGE
FROM Employee, Assignment
WHERE Employee.EMP_NUM = Assignment.EMP_NUM
GROUP BY Assignment.EMP_NUM, Employee.EMP_LNAME
答案 2 :(得分:1)
在进行连接之前,您需要进行聚合,否则,您的数字将不正确:
SELECT e.EMP_NUM, e.EMP_LNAME, a.SUM_HOURS, SUM_CHARGE
FROM (SELECT DISTINCT e.EMP_NUM, e.EMP_LNAME FROM Employee e) e join
(SELECT a.EMP_NUM,
SUM(Assignment.ASSIGN_HOURS) as SUM_HOURS,
SUM(Assignment.ASSIGN_CHARGE) as SUM_CHARGE
FROM Assignment a
GROUP BY a.EMP_NUM
) a
on e.EMP_NUM = a.EMP_NUM;
我还更改了连接语法以使用显式连接。