如何在SQL查询中具有不包含某些记录值的列

时间:2019-02-01 23:01:57

标签: sql

我需要生成一个输出以显示针对id(来自表1)的不同注释(来自table2),但是该注释不是必须存在于表2中。

尝试了Case函数,但它也将NULL值作为额外的一行

表:员工编号

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

2 个答案:

答案 0 :(得分:2)

您似乎正在寻找条件聚合:

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'

答案 1 :(得分:0)

让我知道是否有帮助

await app.listen(process.env.PORT || 3000);