2010-08-17 14 views
8

Esta consulta devuelve la suma de "cerrado" las ventas diarias de un vendedor particular, dentro de un intervalo de fechas en particular:Selección misma columna con diferente donde las condiciones

 
SELECT SUM(price) as closed_total 
FROM dbo.Sales 
WHERE salesperson_ID = @salesperson_ID 
     AND date_ordered BETWEEN @start_date AND @end_date 
     AND closed = 1 
GROUP BY date_ordered 

La salida será similar a:

 
daily_total 
200 
150 
325 
120 
(etc) 

Me gustaría modificar la consulta para devolver una columna para ventas cerradas, y una columna para todas las ventas (misma consulta, pero sin la condición 'cerrada = 1'), con resultados como este:

 
closed_total | all_total 
200   | 275 
150   | 150 
325   | 500 
120   | 280 
(etc) 

He intentado usar UNION para combinar las consultas separadas, así:

 
SELECT SUM(price) as closed_total 
FROM dbo.Sales 
WHERE salesperson_ID = @salesperson_ID 
     AND date_ordered BETWEEN @start_date AND @end_date 
     AND closed = 1 
GROUP BY date_ordered 
UNION ALL 
SELECT SUM(price) as all_total 
FROM dbo.Sales 
WHERE salesperson_ID = @salesperson_ID 
     AND date_ordered BETWEEN @start_date AND @end_date 
GROUP BY date_ordered 

pensé que esto podría hacer lo que estaba buscando, pero pone ambas sumas a una sola columna llamada 'closed_total'. ¿Algunas ideas?

Respuesta

12

Puede probar este

SELECT SUM(price) as total, SUM(CASE WHEN closed = 1 THEN price ELSE 0 END) as closed_total 
FROM dbo.Sales 
WHERE salesperson_ID = @salesperson_ID 
     AND date_ordered BETWEEN @start_date AND @end_date 
GROUP BY date_ordered 
+0

Esta es brillante, gracias! – Ethan

Cuestiones relacionadas