Я использую SQL Server 2014. Когда я тестировал свой код, я заметил проблему. Предположим, что максимальный час составляет 80 часов.Условный SUM в SQL Server 2014
SELECT
lsm.EmployeeName,
pd.absenceDate,
pd.amountInDays * 8 AS [HoursReported],
pd.status,
(SUM(CASE WHEN pd.[status]='App' THEN (pd.amountInDays * 8)
ELSE 0 END) OVER (partition by lsm.[EmployeeName] order by pd.absenceDate)) AS [TotalUsedHours]
(@maxPSHours) - (sum(
CASE WHEN pd.[status]='App' THEN (pd.amountInDays * 8)
ELSE 0 END)
over (
partition by lsm.[EmployeeName] order by pd.absenceDate)) AS [TotalRemainingHours]
FROM
[LocationStaffMembers] lsm
INNER JOIN
[PersonalDays] pd ON lsm.staffMemberId = pd.staffMemberId
Этот запрос возвращает следующие результаты:
EmployeeName AbsenceDate HoursReported Status TotalUsdHrs TotalRemingHrs
X 11/11/2015 4 approved 4 76
X 11/15/2015 8 approved 12 68
X 11/20/2015 2 decline 14 66
X 11/20/2015 2 approved 14 66
Таким образом, запрос отлично работает для различного статуса. Первые 2 строки в порядке. Но когда сотрудник совершает более одного действия за день (отклонение, одобрение и т. Д.), Мой запрос показывает только общее количество использованных и общее количество оставшихся за день.
Вот ожидаемый результат.
EmployeeName AbsenceDate HoursReported Status TotalUsdHrs TotalRemingHrs
X 11/11/2015 4 approved 4 76
X 11/15/2015 8 approved 12 68
X 11/20/2015 2 decline 12 68
X 11/20/2015 2 approved 14 66
Я действительно не прочитал всю проблему ... но не обрамляющая окно с ' RANGE' исправить? – shawnt00
@ shawnt00: Нет, я уверен, что это просто проблема с заказом. – sstan