Оператор SELECT, чтобы получить то, что никогда не происходило - PullRequest
3 голосов
/ 01 марта 2012

У меня есть таблица CallHistory с этими столбцами:

CustomerId, TimeOfCall, CallResult

, и в CallResult у меня могут быть значения, такие как: «Размещенный заказ», «Запрошенный возврат», «Технический вопрос», «Запрос о цене»,и т. д.

Я хочу SELECT CustomerId FROM CallHistory WHERE, чтобы клиент по крайней мере один раз запросил цену, но никогда не размещал заказ.

1008 * Спасибо!

Ответы [ 3 ]

6 голосов
/ 01 марта 2012
SELECT DISTINCT c.CustomerId
    FROM CallHistory c
    WHERE c.CallResult = 'inquired about Pricing'
        AND NOT EXISTS(SELECT 1
                           FROM CallHistory c2
                           WHERE c2.CustomerId = c.CustomerId
                               AND c2.CallResult = 'Placed Order')
2 голосов
/ 01 марта 2012

Я думаю, что вы должны сделать это с помощью одного выбора без объединений или подзапросов

Попробуйте это:

SELECT CustomerId
FROM CallHistory
GROUP BY CustomerId
HAVING COUNT(CASE WHEN CallResult='Inquired about Pricing' THEN 1 ELSE NULL END) > 0
   AND COUNT(CASE WHEN CallResult='Placed Order' THEN 1 ELSE NULL END) = 0
1 голос
/ 01 марта 2012
SELECT CustomerId
  FROM CallHistory
 WHERE CallResult = 'Inquired about Pricing'
EXCEPT
SELECT CustomerId
  FROM CallHistory
 WHERE CallResult = 'Placed Order';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...