我如何将1个表相加并将该结果与另一个表相结合?

时间:2014-04-29 15:54:45

标签: sql oracle

我使用的是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:5not a single-group group function时收到错误。 有没有办法获得此表

3 个答案:

答案 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;

我还更改了连接语法以使用显式连接。