SQL Group от «Мне нравится» - PullRequest
15 голосов
/ 23 мая 2011

У меня есть запрос, по которому я генерирую ежемесячные контакты с клиентами. У нас есть несколько категорий (электронная почта, электронная почта, телефонный звонок, телефонный звонок и т. Д.). Есть 8 различных «типовых» результатов. Мне нужно иметь две группы - одну для всех «электронная почта» и одну для всех «телефон». В настоящее время у меня есть WHERE TYPE LIKE '% Email%' и TYPE LIKE '% Call%'. Тем не менее, я не могу сгруппировать по этим двум «НРАВИТСЯ» заявлениям. Кто-нибудь знает, как мне лучше всего этого добиться?

Я упростил запрос до этого для примера:

SELECT     TYPE
FROM         dbo.HISTORY
WHERE     (TYPE LIKE '%email%') OR
                      (TYPE LIKE '%call%')

Ответы [ 2 ]

20 голосов
/ 23 мая 2011

Это должно сработать:

SELECT
    TYPE
FROM
    dbo.HISTORY
WHERE
    (TYPE LIKE '%email%') OR (TYPE LIKE '%call%')
GROUP BY
    CASE
        WHEN type LIKE '%email%' THEN 'email'
        WHEN type LIKE '%call%' THEN 'call'
        ELSE NULL
    END

Хотя я бы посоветовал иметь таблицу кодов типов с другим столбцом, который сообщает, считается ли каждый тип электронной почтой или вызовом.Тогда вы не зависите от имени типа, следующего за определенным форматом, который наверняка будет забыт в будущем.Затем вы можете легко сгруппировать по этому:

SELECT
    H.type
FROM
    dbo.History
INNER JOIN dbo.History_Types HT ON
    HT.history_type_code = H.history_type_code AND
    HT.history_type_category IN ('Email', 'Call')
GROUP BY
    HT.history_type_category
1 голос
/ 03 февраля 2014

ВЫБРАТЬ H.type ИЗ dbo.History INNER ПРИСОЕДИНИТЬСЯ К dbo.History_Types HT ON HT.history_type_code = H.history_type_code И HT.history_type_category IN («Электронная почта», «Вызов») GROUP BYHT.history_type_category

Не лучше ли поместить оператор filter в предложение where?

SELECT
    H.type FROM
    dbo.History 
    INNER JOIN dbo.History_Types HT ON
    HT.history_type_code = H.history_type_code 
WHERE **HT.history_type_category IN ('Email', 'Call')**
    GROUP BY   HT.history_type_category
...