我需要查询从两个表中获取记录,但列名应该基于第二个表中的记录。 详情如下
我的第一张桌子
<div class="action-container">
<button type="button" class="action" id="subscribe-button">TAKİP ET</button>
</div>
我的第二张表
Emp Table
emp_id emp_name
1 Abc
2 XYZ
3 PQR
我需要输出,
Salary Table
id emp_id month salary
1 1 1 4000
2 1 2 3000
3 2 1 5000
4 2 2 4500
我可以通过使用左连接来实现这一点但是每个月我都需要在查询中添加它,例如,
emp_id emp_name jan feb
1 Abc 4000 3000
2 XYZ 5000 4500
以上工作对我来说但这是不可行的。我也有月份的主表。
select e.emp_id,e.emp_name,j.month as Jan,f.month as Feb from emp e
Left Join salary j on e.emp_id=j.emp_id and j.month=1
Left Join salary f on e.emp_id=f.emp_id and f.month=2
我想要获取当前特定月份的获取记录(Jan&amp; feb)。
请帮助我更快地实现这一目标。
答案 0 :(得分:1)
使用条件聚合:
SELECT
e.emp_id,
e.emp_name,
[Jan] = MAX(CASE WHEN s.[month] = 1 THEN s.salary END),
[Feb] = MAX(CASE WHEN s.[month] = 2 THEN s.salary END),
[Mar] = MAX(CASE WHEN s.[month] = 3 THEN s.salary END),
[Apr] = MAX(CASE WHEN s.[month] = 4 THEN s.salary END),
[May] = MAX(CASE WHEN s.[month] = 5 THEN s.salary END),
[Jun] = MAX(CASE WHEN s.[month] = 6 THEN s.salary END),
[Jul] = MAX(CASE WHEN s.[month] = 7 THEN s.salary END),
[Aug] = MAX(CASE WHEN s.[month] = 8 THEN s.salary END),
[Sep] = MAX(CASE WHEN s.[month] = 9 THEN s.salary END),
[Oct] = MAX(CASE WHEN s.[month] = 10 THEN s.salary END),
[Nov] = MAX(CASE WHEN s.[month] = 11 THEN s.salary END),
[Dec] = MAX(CASE WHEN s.[month] = 12 THEN s.salary END)
FROM Emp e
LEFT JOIN Salary s
ON s.emp_id = e.emp_id
GROUP BY
e.emp_id, e.emp_name