2011-05-23 147 views
12

我有一個查詢,在其中生成我們每月的客戶聯繫活動。我們有幾個類別(發送電子郵件,電子郵件,打電話,打電話等)。有8種不同的「類型」結果。我需要有兩個組 - 一個是「電子郵件」,一個是「電話」。目前,我有一個WHERE TYPE LIKE'%Email%'和TYPE LIKE'%Call%'。但是,我無法通過這兩個「LIKE」聲明進行分組。有誰知道我如何最好地實現這一目標?SQL Group by「Like」

我簡化了查詢到本作的例子:

SELECT  TYPE 
FROM   dbo.HISTORY 
WHERE  (TYPE LIKE '%email%') OR 
         (TYPE LIKE '%call%') 

回答

17

這應該工作:

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 
0

SELECT H.type FROM dbo.History INNER JOIN dbo.History_Types HT ON HT.history_type_code = H.history_type_code 和 HT.history_type_category IN ( '電子郵件', '通話') GROUP BY HT.history_type_category

那豈不是更好地把篩選語句到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