【发布时间】:2016-10-24 20:32:02
【问题描述】:
我有两张表,Employees 和 EmployeeVacations。我正在尝试执行 SQL 查询,以获取每个员工已休的休假时间以及截至今天的当前余额的总和。这是我当前的 SQL 查询:
SELECT
e.PIN,
e.FirstName,
e.LastName,
e.Uniform,
e.AL_Cap,
ev.Value AS '10/1 Balance',
(SELECT
SUM(value)
FROM EmployeeVacations
WHERE CreationDate >= '2016-10-01'
AND Vacation_Type = 'Taken'
AND Vacation_Kind = 'AL'
AND EmployeeId = 13)
AS Taken
FROM employees e,
EmployeeVacations ev
WHERE e.Id = ev.EmployeeId
AND ev.IsHistory = 0
AND ev.Vacation_Type = 'Forward'
AND ev.Vacation_Kind = 'AL'
AND EmployeeId = 13
ORDER BY e.LastName, e.FirstName
如果我选择一个员工,这很有效。如果我删除“其中 EmployeeId = 13”,我会得到所有员工的列表,其中包含每行中每个人的总假期总和(如 1,300 小时)。我如何分解它以便只显示每个员工的 Taken?
【问题讨论】:
-
根据您使用的 sql server 版本,这可能会使用窗口函数来处理。
-
你应该使用显式连接——它更清晰。
-
您正在显示员工的转发记录列表,每条记录以及员工的总和。这是想要的吗?还是您也想要员工的预付款,即每位员工只有一个结果行?
标签: sql sql-server tsql