Сумма результатов из двух выбранных утверждений - PullRequest
9 голосов
/ 27 декабря 2011

Нашим сотрудникам выплачиваются комиссионные еженедельно, и из-за структуры бонусов мне приходится рассчитывать две отдельные недели оплаты, а затем складывать их вместе.

У меня есть следующий оператор SQL, который получает дварезультаты по отдельным неделям

    SELECT  PerceptionistID, SSNLastFour, CommissionPay,
        PTOPay, HolidayPay, Overtime, TotalPay
    FROM [dbo].fnCalculateCommissionForWeekOf(@MondayOfCurrentWeek)

    UNION

    -- Need to get the following week's data and sum the two together
    SELECT  PerceptionistID, SSNLastFour, CommissionPay,
        PTOPay, HolidayPay, Overtime, TotalPay
    FROM [dbo].fnCalculateCommissionForWeekOf(@MondayOfFollowingWeek)

Это дает мне необходимые данные, но я хотел бы объединить два результата в одну таблицу с одинаковыми столбцами, но с добавлением нескольких столбцов (CommissionPay, PTOPay, HolidayPayСверхурочные, TotalPay).Каков наилучший способ сделать это?Я использую SQL Server 2008 R2.

Ответы [ 3 ]

13 голосов
/ 27 декабря 2011

Попробуйте это

SELECT PerceptionistID, SSNLastFour, SUM(CommissionPay) CommissionPay,
        SUM(PTOPay) PTOPay, SUM(HolidayPay) HolidayPay, SUM(Overtime) Overtime, SUM(TotalPay) TotalPay
FROM
(
    SELECT  PerceptionistID, SSNLastFour, CommissionPay,
        PTOPay, HolidayPay, Overtime, TotalPay
    FROM [dbo].fnCalculateCommissionForWeekOf(@MondayOfCurrentWeek)

    UNION ALL

    -- Need to get the following week's data and sum the two together
    SELECT  PerceptionistID, SSNLastFour, CommissionPay,
        PTOPay, HolidayPay, Overtime, TotalPay
    FROM [dbo].fnCalculateCommissionForWeekOf(@MondayOfFollowingWeek)
) t
GROUP BY PerceptionistID, SSNLastFour
1 голос
/ 27 декабря 2011

Сделайте ваш запрос подзапросом и сгруппируйте его на уровне 'superquery':

SELECT PerceptionistID, SSNLastFour, sum(CommissionPay), ...
FROM 
(
SELECT  PerceptionistID, SSNLastFour, CommissionPay,
    PTOPay, HolidayPay, Overtime, TotalPay
FROM [dbo].fnCalculateCommissionForWeekOf(@MondayOfCurrentWeek)

UNION

-- Need to get the following week's data and sum the two together
SELECT  PerceptionistID, SSNLastFour, CommissionPay,
    PTOPay, HolidayPay, Overtime, TotalPay
FROM [dbo].fnCalculateCommissionForWeekOf(@MondayOfFollowingWeek)
) AS X
GROUP BY PerceptionistID, SSNLastFour
0 голосов
/ 27 декабря 2011

Как насчет изменения [dbo] .fnCalculateCommissionForWeekOf или создания новой функции, которая принимает даты начала и окончания.Таким образом, вы можете использовать одну и ту же функцию и ту же логику для запуска любого диапазона дат, включая прошедшую неделю, 2 недели, месяц, год и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...