Подтвердить что ты не робот

SQL Group "Like"

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

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

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

Ответ 1

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

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

Ответ 2

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

Не лучше ли поставить оператор фильтра в предложение 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