SQL Group by"Like"

Jen*_*art 17 sql group-by sql-like

我有一个查询,我生成我们的每月客户联系活动.我们有几个类别(电子邮件,电子邮件,电话,电话呼叫等).有8种不同的"类型"结果.我需要有两个小组 - 一个用于所有"电子邮件",一个用于所有"电话".目前,我有一个WHERE TYPE LIKE'%Email%'和TYPE LIKE'%Call%'.但是,我无法通过这两个"LIKE"语句进行分组.有谁知道我怎么能最好地实现这一目标?

我将查询简化为此示例:

SELECT     TYPE
FROM         dbo.HISTORY
WHERE     (TYPE LIKE '%email%') OR
                      (TYPE LIKE '%call%')
Run Code Online (Sandbox Code Playgroud)

Tom*_*m H 20

这应该工作:

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
Run Code Online (Sandbox Code Playgroud)

虽然,我的建议是让一个类型代码表与另一列,告诉每个类型是否被视为电子邮件或电话.然后你不会依赖于特定格式的类型名称,这种格式肯定会被遗忘.然后,您可以轻松地分组:

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
Run Code Online (Sandbox Code Playgroud)