【问题标题】: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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-20
        • 2017-03-21
        • 2016-04-04
        • 2014-09-21
        • 2019-07-03
        • 2021-12-06
        • 2017-09-06
        • 2021-03-18
        相关资源
        最近更新 更多