2011-12-27 13 views
8

Nuestros empleados reciben comisiones semanales y, debido a una estructura de bonificación, tengo que calcular dos semanas de sueldo por separado y luego sumar las dos.Suma resultados de dos declaraciones seleccionadas

He la siguiente instrucción SQL que consiga los dos semanas separadas resultados

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) 

Esto me pone los datos que necesito, pero me gustaría combinar los dos resultados en una tabla con las mismas columnas, pero tener alguna de las columnas agregadas juntas (CommissionPay, PTOPay, HolidayPay, Overtime, TotalPay). ¿Cuál es la mejor manera de hacer esto? Estoy usando SQL Server 2008 R2.

Respuesta

12

probar este

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

¡Excelente, funciona como un encanto! – BrianKE

+2

¡Buena suerte! Espero que hayas aprendido algo hoy. 8-) –

1

Haga su consulta una subconsulta, y el grupo en el nivel '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

Cómo acerca de la modificación [dbo] .fnCalculateCommissionForWeekOf o la creación de una nueva función que toma una fecha de inicio y finalización De esta forma puede usar la misma función y la misma lógica para ejecutar contra cualquier lapso de fechas, incluyendo la semana anterior, 2 semanas, mes, año, etc.

Cuestiones relacionadas