SQL Group by“Like”

时间:2011-05-23 18:38:48

标签: 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%')

2 个答案:

答案 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