我有一个查询,我可以在其中生成每月的客户联系活动。我们有几个类别(电子邮件,电子邮件,电话,电话呼叫等)。有8种不同的“类型”结果。我需要有两个小组 - 一个用于所有“电子邮件”,一个用于所有“电话”。目前,我有一个WHERE TYPE LIKE'%Email%'和TYPE LIKE'%Call%'。但是,我无法通过这两个“LIKE”语句进行分组。有谁知道我怎么能最好地实现这一目标?
我将查询简化为此示例:
SELECT TYPE
FROM dbo.HISTORY
WHERE (TYPE LIKE '%email%') OR
(TYPE LIKE '%call%')
答案 0 :(得分:19)
这应该有效:
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 :(得分:1)
选择 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('电子邮件','呼叫') GROUP BY HT.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