sql选择元组和按ID分组

时间:2014-12-01 20:15:30

标签: sql oracle

我有当前的数据库架构

 EMPLOYEES
 ID | NAME | JOB

 JOBS
 ID | JOBNAME | PRICE

我想查询以便它通过每个员工,并获得他们所有的工作,但我希望将每个员工ID分组,以便它返回员工ID,然后返回他们拥有的所有工作。例如,如果ID为1的员工有ID,JOBNAME(1,Roofing)的工作,(1,砌砖) 我希望它返回类似

的内容
1 Roofing Bricklaying

我在尝试

SELECT ID,JOBNAME FROM JOBS WHERE ID IN (SELECT ID FROM EMPLOYEES) GROUP BY ID;

但得到错误

not a GROUP BY expression

希望这很清楚,如果没有请说,我会尝试更好地解释

2 个答案:

答案 0 :(得分:0)

您还需要将JobName也按表达式分组。

 SELECT ID,JOBNAME FROM JOBS WHERE ID IN (SELECT ID FROM EMPLOYEES) GROUP BY ID,JOBNAME; 

答案 1 :(得分:0)

编辑:

WITH ALL_JOBS AS
    (
    SELECT ID,LISTAGG(JOBNAME || ' ') WITHIN GROUP (ORDER BY ID) JOBNAMES FROM JOBS GROUP BY ID
    )
    SELECT ID,JOBNAMES FROM ALL_JOBS A,EMPLOYEES B
    WHERE A.ID = B.ID
    GROUP BY ID,JOBNAMES;

在with子句中,我按ID分组并连接与ID对应的列(也与''连接以区分列)。 例如,如果我们有

ID NAME
1  Roofing
1  Brick laying
2  Michael
2  Schumacher 

我们将结果集设为

ID NAME
1  Roofing Brick laying
2  Michael Schumacher

然后,我将这个结果集加入ID上的EMPLOYEES表。