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

如何在SQL查询中包含某些记录没有值的列,sql,database,join,group-by,pivot,Sql,Database,Join,Group By,Pivot,我需要生成一个输出来显示一个id(来自表1)的不同备注(来自表2),但是备注不是必须出现在表2中的 ID Name 100021 Bob 100023 Tom 100024 Jim ID remark remark text 100021 job manager 100021 salary 5000 100021 dept clas

我需要生成一个输出来显示一个id(来自表1)的不同备注(来自表2),但是备注不是必须出现在表2中的

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
尝试了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
表:员工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
表:员工备注

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
要求的结果

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

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

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
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(r.remark='job'…)将行从
employee\u remark
转换为列。
COALESCE()

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
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.id

欢迎来到StackOverflow!显示您尝试过的SQL。纠正一些不太正确的事情要比瞎猜容易得多。对不起,我没有太多要说的。你们能看到附加的截图吗?请让我知道。