如果另一个表中的值= true,则选择double sum

时间:2013-05-02 09:56:17

标签: sql sql-server sql-server-2005 sum case

我不会深入了解我的表格结构,也不会查询我的查询,这实在是太大了。我将解释一个非常简单的场景,我的问题适用于:

销售人员出售物品。我每个月为每个销售人员制作总销售额。 在某个特定的月份,我们将其销售额翻倍。例如。在2012年2月,如果Pauline已售出价值10,000美元的商品,我们将销售额记录为20,000美元。

我有一张销售表,例如:

Salesman_Id    Period       Sales
Pauline        201201       4200
Johnny         201201       2000
Rowan          201201       8100
Pauline        201202       3300
Johnny         201202       2900
Rowan          201202       1100
Pauline        201203       8000
Johnny         201203       4000
Rowan          201203       3100

我有一个销售期表,例如:

Sales_Period    Double_Period
201201          F
201202          T
201203          F

销售期间表显示2012/02年度是一个双倍期间 - 即您销售的商品的价值翻倍。这意味着在一天结束时,我应该得到:

Salesman_Id         Total_Sales
Pauline             18800
Johnny              11800
Rowan               13400
例如,Rowan的销售额= 8100 +(1100 * 2)+ 3100 = 13400

因此,我的问题是:如何将Double_Period考虑在内的每个月的所有销售人员的总销售额报告?这绝不是一个艰难的问题。我希望你们能帮忙。

1 个答案:

答案 0 :(得分:2)

在这里,您需要使用SUM()功能来获得总销售额。如果CASE,您需要使用Double_Period = T语句来增加销售额 所以试试这个:

SELECT s.Salesman_Id
, SUM(CASE WHEN sp.Double_Period = 'T' 
           THEN 2 * s.Sales 
           ELSE s.Sales END) AS Total_Sales
FROM Sales s 
JOIN Sales_period sp
  ON s.Period = sp.Sales_Period
GROUP BY s.Salesman_Id

输出:

╔═════════════╦═════════════╗
║ SALESMAN_ID ║ TOTAL_SALES ║
╠═════════════╬═════════════╣
║ Johnny      ║       11800 ║
║ Pauline     ║       18800 ║
║ Rowan       ║       13400 ║
╚═════════════╩═════════════╝

See this SQLFiddle