根据不同的标准添加另一列(SQL-server)

时间:2014-08-29 16:04:53

标签: sql sql-server

我做了很多数据分析并且每天都使用SQL,但是我的查询相当简单,通常会提取大量数据,然后我在excel中操作,我更有经验。

这一次虽然我尝试生成一些实时图表,其中包含一个SQL查询作为输入。我现在必须在没有我熟悉的excel工具的帮助下创建复杂的表格。

问题如下:

我们有电话销售代理商通过回复入站电话和制作出站电话来预约约会。这些将产生可能导致销售的潜在客户。这个问题的相关表格和字段是:

Contact Table
Agent

Sales Table
Price
OutboundCallDate

我想知道每个电话销售代理商在一列中的各自总销售额,以及在另一列中的出境销售额。

最终结果应如下所示:

+-------+------------+---------------+
| Agent | TotalSales | OutboundSales |
+-------+------------+---------------+
| Tom   |      30145 |             0 |
| Sally |      16449 |          1000 |
| John  |      10500 |           300 |
| Joe   |      50710 |             0 |
+-------+------------+---------------+

使用以下SQL,我得到以下结果:

SELECT contact.agent, SUM(sales.price)
FROM contact, sales
WHERE contact.id = sales.id
GROUP BY contact.agent   
+-------+------------+
| Agent | TotalSales |
+-------+------------+
| Tom   |      30145 |
| Sally |      16449 |
| John  |      10500 |
| Joe   |      50710 |
+-------+------------+

我想在此查询结果中添加第三列,其中价格仅对OutboundCallDate字段包含数据的记录求和。有点像(sales.OutboundCallDate不是空的)

我希望这很清楚。如果情况不是这样,请告诉我。

3 个答案:

答案 0 :(得分:2)

使用CASE

SELECT c.Agent, 
       SUM(s.price) AS TotalSales,
       SUM(CASE 
               WHEN s.OutboundCallDate IS NOT NULL THEN s.price
               ELSE 0
           END) AS OutboundSales
FROM contact c, sales s
WHERE c.id = s.id
GROUP BY c.agent 

答案 1 :(得分:0)

我认为代码看起来像

SELECT contact.agent, SUM(sales.price)
FROM contact, sales
WHERE contact.id = sales.id AND SUM(WHERE sales.OutboundCallDate)
GROUP BY contact.agent

答案 2 :(得分:0)

notI&m;假设您的销售表包含单位和价格等内容。如果它只是销售额,则将计算替换为销售额字段名称。

这里的关键是,如果OutboundCallDate存在,则总和的值应该只是销售额。如果OutboundCallDate不为NULL,那么我们为该行使用值0。

    select Agent.Agent, TotalSales = sum (sales.Price*Units)
        , OutboundSales =  sum (
                case when Outboundcalldate is not null then price*Units 
                    else 0 
                end)
    From Sales inner join Agent on Sales.Agent = Agent.Agent
    Group by Agent.Agent