如何在SQL查询中包含某些记录没有值的列
我需要生成一个输出来显示一个id(来自表1)的不同备注(来自表2),但是备注不是必须出现在表2中的如何在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 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。纠正一些不太正确的事情要比瞎猜容易得多。对不起,我没有太多要说的。你们能看到附加的截图吗?请让我知道。