【问题标题】:SQL Group by "Like"SQL 组按“喜欢”
【发布时间】:2011-05-23 18:38:48
【问题描述】:
我有一个查询,我在哪里生成我们每月的客户联系活动。我们有几个类别(发送电子邮件、发送电子邮件、拨入电话、拨出电话等)。有 8 种不同的“类型”结果。我需要有两组——一组用于所有“电子邮件”,一组用于所有“电话”。目前,我有一个 WHERE TYPE LIKE '%Email%' 和 TYPE LIKE '%Call%'。但是,我无法按这两个“LIKE”语句进行分组。有谁知道我怎样才能最好地做到这一点?
我将查询简化为示例:
SELECT TYPE
FROM dbo.HISTORY
WHERE (TYPE LIKE '%email%') OR
(TYPE LIKE '%call%')
【问题讨论】:
标签:
sql
group-by
sql-like
【解决方案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】:
选择
H.type FROM
dbo.历史
INNER JOIN dbo.History_Types HT ON
HT.history_type_code = H.history_type_code AND
HT.history_type_category IN ('Email', 'Call')
按 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