我有当前的数据库架构
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
希望这很清楚,如果没有请说,我会尝试更好地解释
答案 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表。