2010-08-17 59 views
8

该查询返回的“封闭”的总和一个特定的日期范围内每日销售特定销售人员:选择同一列不同的地方条件

 
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 

输出看起来像:

 
daily_total 
200 
150 
325 
120 
(etc) 

我想修改查询以返回一列用于封闭销售,并为所有销售(相同查询,但不包含'closed = 1'条件)返回一列,并输出如下内容:

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

我使用UNION到单独的查询相结合,这样的尝试:

 
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 

我想这可能做什么,我一直在寻找,但它把两个和到名为“closed_total”一列。有任何想法吗?

回答

12

你可以试试这个

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

这是辉煌的,谢谢! – Ethan 2010-08-17 21:47:45