2011-05-23 15 views
12

Tengo una consulta donde genero nuestra actividad de contacto mensual con el cliente. Tenemos varias categorías (correo electrónico, correo electrónico, llamadas telefónicas, llamadas telefónicas, etc.). Hay 8 resultados distintos de "tipo". Necesito tener dos grupos: uno para todos los "correos electrónicos" y uno para todos los "teléfonos". Actualmente, tengo un WHERE TYPE LIKE '% Email%' y TIPO LIKE '% Call%'. Sin embargo, no puedo agrupar por estas dos declaraciones "ME GUSTA". ¿Alguien sabe cómo puedo lograr esto?Grupo SQL por "Me gusta"

que simplifica la consulta reduce a esto para el ejemplo:

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

Respuesta

17

esto debería funcionar:

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 

Aunque, mi consejo sería tener una tabla de códigos tipo con otra columna que dice si cada tipo se considera un correo electrónico o una llamada. Entonces no depende del nombre del tipo siguiendo un formato específico que seguramente se olvidará en el futuro. A continuación, puede fácilmente grupo en que:

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 DE dbo.History INNER JOIN dbo.History_Types HT EN HT.history_type_code = H.history_type_code Y EN HT.history_type_category ('Correo electrónico', 'Call') GROUP BY HT.history_type_category

¿no sería mejor poner la instrucción de filtro en la cláusula 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