如何从两个表中获取记录,根据第二个表行记录指定列名

时间:2016-05-13 06:56:51

标签: sql-server

我需要查询从两个表中获取记录,但列名应该基于第二个表中的记录。 详情如下

我的第一张桌子

<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)。

请帮助我更快地实现这一目标。

1 个答案:

答案 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

ONLINE DEMO