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%')
Ответы
Ответ 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