2011-05-23 10 views
12

Aylık müşteri iletişim aktivitelerimizi oluşturduğum bir sorgum var. Birkaç kategorimiz var (e-posta çıkışı, e-posta adresi, telefon görüşmesi, telefon görüşmesi, vb.) 8 farklı "tip" sonucu vardır. Tüm "e-posta" ve diğeri "telefon" için iki grup-bir olmalı. Şu anda, '% E-posta%' gibi bir LOT TİPİ VE TİP GİBİ '% Çağrı%' var. Ancak, bu iki "LIKE" ifadesiyle gruplayamıyorum. Bunu en iyi nasıl başarabileceğimi bilen var mı?SQL Grup "Beğen"

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

cevap

17

Bu çalışması gerekir:

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 

benim tavsiyem söyler başka bir sütun ile bir tür kod tablosu için olurdu rağmen

Ben mesela bu sorgu aşağı basitleştirilmiş her tür bir e-posta veya çağrı olarak kabul edilir. O zaman, yolda unutulmayacak olan belirli bir formatın ardından tür ismine güvenmiyorsunuz. Şunları yapabilirsiniz o zaman bizim kolayca grubu: AÇIK dbo.History iç birleşim dbo.History_Types HT GELEN

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

SEÇ H.type HT.history_type_code = H.history_type_code VE HT.history_type_category İÇİNDE ('E-posta', 'Çağrı') HT.history_type_category

nerede fıkra içine filtre deyimi koymak daha iyi olmaz TARAFINDAN GRUBU?

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