sql - 根据不同的条件添加另一列(SQL 服务器)

标签 sql sql-server

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

这次我尝试生成一些实时图表,这些图表以单个 SQL 查询作为输入。我现在必须在不借助我非常熟悉的 Excel 工具的情况下创建复杂的表格。

问题如下:

我们有电话销售代理,通过接听来电和调用外拨电话来进行预约。这些将产生可能导致销售的潜在客户。该问题的相关表和字段如下:

Contact Table
Agent

Sales Table
Price
OutboundCallDate

我想知道每个电话销售代理在一栏中各自的总销售金额,以及在另一栏中的对外销售值(value)。

最终结果应该如下所示:

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

With the below SQL I get the following result:

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 不为空)

我希望这已经足够清楚了。如果情况并非如此,请告诉我。

最佳答案

使用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 

关于sql - 根据不同的条件添加另一列(SQL 服务器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25572030/

相关文章:

mysql - SQL查询根据计数和一些过滤器查找最大值

python - 返回数据库中的部门类(class)

sql - 使用不同的 where 条件更新多条记录

sql-server - 将 SQL Server 2008 数据库迁移到 2016

sql - 表的增量更新

c# - 如何在从 ASP.Net 应用程序作为电子邮件发送的文本消息中包含换行符?

sql - 如何在 SQL 查询中检查字符串是否恰好包含两个单词?

sql - Ecto 查询 - 日期 + Postgres 间隔 + 查询插值

python - 如何在 Python sqlite3 中使用元组选择 WHERE IN VALUES?

sql - 如何在SQL Server中解析两个JSON?