目前我正在开发一个带有sql server数据库的项目。我的查询有问题。我有一张桌子:
当前表:
Month | Year | EmpID | Salary
------------------------------------
1 2016 123 100
2 2016 123 120
3 2016 123 110
4 2016 123 150
1 2016 456 200
2 2016 456 210
3 2016 456 225
4 2016 456 220
我想用这样的结果创建一些东西:
查询表后:
EmpID | Salary1 | Salary2 | Salary3 | Salary4
123 100 120 110 150
456 200 210 225 220
注意:根据月份表命名工资表,这样就会有Salary12
我应该输入什么查询?我应该为此创建一个视图或存储过程吗?
答案 0 :(得分:1)
您的选择是视图,存储过程或存储的功能。我认为没有理由使用存储过程 - 我认为当你可以在另一个查询中使用它时,结果集会更有用。
您可以使用pivot
或条件聚合作为结果。作为一种观点:
create view v_current as
select c.empid,
max(casewhen c.month = 1 then salary end) as salary_01,
max(casewhen c.month = 2 then salary end) as salary_02,
. . .
max(casewhen c.month = 12 then salary end) as salary_12
from current c
where c.year = year(getdate())
group by c.empid;
注意:month
和year
是SQL Server中的关键字,因此它们是列名称的非常糟糕的选择。您应该为这些列找到另一个名称。