我没有足够的积分来发布图像,但这里是我的表格屏幕截图的链接: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/