2014-08-29 4 views
2

Я занимаюсь анализом данных и ежедневно использую SQL, но мои запросы довольно просты, обычно тянут много данных, которые я впоследствии обрабатываю в excel, где я намного более опытный.Добавление другого столбца на основе разных критериев (SQL-сервер)

На этот раз, хотя я пытаюсь создать некоторые живые графики, которые имеют в качестве входных данных один SQL-запрос. Теперь мне придется создавать сложные таблицы без помощи инструментов excel, с которыми я так знаком.

Проблема заключается в следующем:

Мы Telesales агентов, которые резервировать назначения, отвечая на входящие звонки и для исходящих CALs. Это приведет к появлению потенциальных клиентов, которые могут привести к продаже. Соответствующие таблицы и поля для этой задачи таковы:

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 не является нулевым)

Надеюсь, это достаточно ясно. Дайте мне знать, если это не так.

+0

Не совсем понятно, что вы просите. Вы хотите что-то вроде 'SUM (CASE WHERE sales.OutboundCallDate NOT NULL THEN sales.price ELSE 0 END)'? – Dan

+0

Вы сделали это очень легко! Я просто должен был исправить случай, когда для случая когда. Спасибо, миллион Дэн! – Sergio

ответ

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 
0

Я думаю, что код будет выглядеть

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

notI'm предполагается, что ваш стол Sales содержит что-то вроде единиц и цена. Если это всего лишь сумма продаж, то замените расчет на имя поля суммы продаж.

Главное, что сумма, суммированная, должна быть только суммой продаж, если существует 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 
Смежные вопросы