我需要生成一个输出来显示一个id(来自表1)的不同注释(来自table2),但是注释并不是必须出现在表2中。
尝试过的Case函数,但它也将NULL值作为额外的一行
表:员工id
ID Name
100021 Bob
100023 Tom
100024 Jim 表:员工备注
ID remark remark text
100021 job manager
100021 salary 5000
100021 dept classic
100023 job CSR
100023 salary 4000
100024 dept customer 必需的结果
ID Name Job Salary Dept
100021 Bob manager 5000 classic
100023 Tom CSR 4000 NA
100024 Jim NA NA customer发布于 2019-02-02 07:12:19
您似乎在寻找条件聚合:
SELECT
i.id,
i.name,
COALESCE(MAX(CASE WHEN r.remark = 'job' THEN r.remark_text END), 'NA') AS job,
COALESCE(MAX(CASE WHEN r.remark = 'salary' THEN r.remark_text END), 'NA') AS salary,
COALESCE(MAX(CASE WHEN r.remark = 'dept' THEN r.remark_text END), 'NA') AS dept
FROM
employee_id AS i
INNER JOIN employee_remark r ON r.id = i.id
GROUP BY
i.id,
i.name查询的工作方式是将两个表连接在一起,然后按用户聚合结果。在SELECT子句中,MAX(CASE WHEN WHEN r.remark = 'job' ...)用于将employee_remark中的行转换为列。COALESCE()函数检测NULL值并将其替换为字符串'NA'。
发布于 2019-02-02 07:45:52
如果有帮助,请告诉我
select e.*, job,salary, dept
from Employee_id e left join
(SELECT r.id,
MAX(CASE WHEN r.remark = 'job' THEN r.remark_text ELSE 'NA' END) AS job,
MAX(CASE WHEN r.remark = 'salary' THEN r.remark_text ELSE 'NA' END) AS salary,
MAX(CASE WHEN r.remark = 'dept' THEN r.remark_text ELSE 'NA' END) AS dept
FROM Employee_Remarks r
GROUP BY r.id) rr
on e.id=rr.idhttps://stackoverflow.com/questions/54488242
复制相似问题