2011-12-27 48 views
8

我们的员工每周都会收到佣金,由于奖金结构,我必须计算两个单独的工资周,然后将两者加在一起。来自两条陈述的总和结果

我有得到两个单独的周下面的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,Overtime,TotalPay)。做这个的最好方式是什么?我正在使用SQL Server 2008 R2。

回答

12

试试这个

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

非常好,像魅力一样工作! – BrianKE 2011-12-27 18:20:04

+2

祝你好运!我希望你今天学到了一些东西。 8-) – 2011-12-27 18:42:35

1

在 '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

如何修改[DBO] .fnCalculateCommissionForWeekOf或创建一个新的函数,它开始和结束日期。通过这种方式,您可以使用相同的功能和相同的逻辑针对任何日期范围运行,包括上周,2周,月,年等。