2010-08-17 8 views
8

Ta kwerenda zwraca sumę „zamknięty” dzienna sprzedaż dla konkretnego sprzedawcy w określonym przedziale czasowym:Wybór samą kolumnę z inna warunki

 
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 

Wyjście wygląda następująco:

 
daily_total 
200 
150 
325 
120 
(etc) 

Chciałbym zmodyfikować zapytanie, aby zwrócić jedną kolumnę dla zamkniętej sprzedaży i jedną kolumnę dla całej sprzedaży (to samo zapytanie, ale bez warunku "closed = 1"), z takim wynikiem:

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

Próbowałem za pomocą UNION łączenie oddzielnych zapytań, tak:

 
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 

Pomyślałem, że może to zrobić to, czego szuka, ale kładzie obie sumy w jednej kolumnie o nazwie „closed_total”. Jakieś pomysły?

Odpowiedz

12

Można spróbować to

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

To jest genialne, dziękuję! – Ethan