SQL Server:创建视图或过程?

时间:2016-06-25 06:23:35

标签: sql sql-server sql-server-2008

目前我正在开发一个带有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

我应该输入什么查询?我应该为此创建一个视图或存储过程吗?

1 个答案:

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

注意:monthyear是SQL Server中的关键字,因此它们是列名称的非常​​糟糕的选择。您应该为这些列找到另一个名称。