如何在sql查询中添加新列并为其分配预先计算的值?

时间:2017-05-31 10:47:43

标签: sql sql-server sql-server-2012

我有一个名为

的表
employee
---------
EmployeeNo(PK)
Fname
Lname
Status
Salary
Position
DeptNo(FK)

我希望在每个部门中显示平均薪水,并使用新列名称Net_total混淆。

4 个答案:

答案 0 :(得分:1)

请试试这个:

ALTER TABLE employee
ADD Net_total INT NOT NULL;

UPDATE employee e
SET e.Net_total = (
SELECT AVG(e1.salary)
FROM employee e1
GROUP BY DeptNo
)

WHERE e1.DeptNo = e.DeptNo;

答案 1 :(得分:1)

无需为此创建额外字段,您可以计算并显示如下值:

select e.EmployeeNo,
       e.Fname,
       e.Lname,
       e.Status,
       e.Salary,
       e.Position,
       e.DeptNo,
       (select avg(e2.Salary) from employee e2 where e2.DeptNo = e.DeptNo) as net_total
from   employee e

您还可以为此创建视图:

create view vwEmployee as
select e.EmployeeNo,
       e.Fname,
       e.Lname,
       e.Status,
       e.Salary,
       e.Position,
       e.DeptNo,
       (select avg(e2.Salary) from employee e2 where e2.DeptNo = e.DeptNo) as net_total
from   employee e

现在你可以做到

select * from vwEmployee

答案 2 :(得分:0)

你可以使用avg with partition by

$(document).ready(function () {$('#projEndDt').datetimepicker({useCurrent: false});});

答案 3 :(得分:0)

以下是您的一些选择:

  1. 使用DML触发器
  2. 来自msdn documentation

      

    触发器是一种特殊的存储过程,在数据库服务器中发生事件时自动执行。当用户尝试通过数据操纵语言(DML)事件修改数据时,DML触发器执行。 DML事件是表或视图上的INSERT,UPDATE或DELETE语句。无论是否有任何表行受到影响,触发任何有效事件时都会触发这些触发器。

    所以方法是改变你的表以添加一个支持NULL的列并添加触发器,每当有INSERT或UPDATE操作时它将更新该列

    1. 使用观看
    2. 在此表的顶部创建一个视图,您可以在其中添加另一列,其值根据您的公式动态计算。您将始终使用视图而不是表格,您需要引用Net_total列