sql - 将 SQL 值计算到新插入中

标签 sql sql-server

我没有足够的积分来发布图像,但这里是我的表格屏幕截图的链接:My query screen shot

我有一个 SQL Server 表,其中包含员工的病假时间。我们的代码未输入 2016 年 8 月 1 日的远期余额(已修复)。我需要从 2016-07-01 (19.32) 获取远期余额,并添加 2016-06-30 (6.66) 的已赚余额,并减去 2016-07-01 到 2016-07-31 期间获取的所有余额 (3, 6和 1.5) 并将其插入到类似于第 3 行和第 10 行的新记录中,但远期余额应为 13.48。

如何编写 SQL 语句来为所有 EmployeeID 执行此操作?我尝试使用 SUM 但效果不佳。

Select Value 
From  EmployeeVacations 
Where Vacation_Kind = 'SL'
  and Vacation_Type = 'Forward' 
  and CreationDate = '2016-07-01' 
  and EmployeeId = 1775

加上:

Select Value 
From  EmployeeVacations 
Where Vacation_Kind = 'SL' 
  and Vacation_Type = 'Earned' 
  and CreationDate = '2016-06-30' 
  and EmployeeId = 1775

减号:

Select SUM(Value) as TotalTaken 
From  EmployeeVacations 
Where Vacation_Kind = 'SL' 
  and Vacation_Type = 'Taken' 
  and CreationDate >= '2016-07-01' 
  and CreationDate <= '2016-07-31' 
  and EmployeeId = 1775

然后从这三个值中取出值并插入到新记录中,例如

INSERT into EmployeeVacations ([EmployeeId], [Vacation_Kind], [Vacation_Type], [CreationDate], [Value]) 
VALUES (1775, 'SL', 'Forward', '2016-08-01', 13.48)

最佳答案

我没有重现您的数据,因此无法对此进行测试,但我认为您应该采用这样的方法:

INSERT INTO EmployeeVacations ([EmployeeId], [Vacation_Kind], [Vacation_Type], [CreationDate], [Value])
SELECT EmployeeId, 'SL', 'Forward', '2016-08-01', SUM(Value)
FROM (
    Select EmployeeId, Value 
    From  EmployeeVacations 
    Where Vacation_Kind = 'SL'
    and Vacation_Type = 'Forward' 
    and CreationDate = '2016-07-01' 

    UNION ALL

    Select EmployeeId, Value 
    From  EmployeeVacations 
    Where Vacation_Kind = 'SL' 
    and Vacation_Type = 'Earned' 
    and CreationDate = '2016-06-30' 

    UNION ALL

    Select EmployeeId, -Value
    From  EmployeeVacations 
    Where Vacation_Kind = 'SL' 
    and Vacation_Type = 'Taken' 
    and CreationDate >= '2016-07-01' 
    and CreationDate <= '2016-07-31' 
) SubQ
GROUP BY EmployeeId

正如您所看到的,我只是使用了一个包含您需要的所有信息的子查询,没有其他信息,然后我只是按员工对其进行分组。

当然,您应该首先在没有 INSERT 行的情况下运行它,以确保您获得所需的内容。

关于sql - 将 SQL 值计算到新插入中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39459678/

相关文章:

sql-server - SQL Server 2014 Group By 中的随机值

sql - 在 teradata 中按日期对一组记录进行分组

mysql - 如何使用查询结果更新单个列的值?

sql - 根据条件逻辑更新表列值

sql-server - 如何获取所有对象的所有扩展属性的列表

sql-server - 如何从本地实例查询/插入 Azure SQL Server

sql - 如何执行带动态计数的GO语句?

sql - 如果存在逗号,则删除字符串中逗号后的所有字符

sql - 如何调整表包含 30,000 多行的 7 表连接 MySQL 计数查询?

mysql - 使用输入中的常量值更新列字段累积和