2017-10-16 2 views
1

Comment utiliser le cas imbriqué et regroupés le résultat. Voici ma requête:Comment utiliser le cas imbriqué et regrouper le résultat dans le SQL

SELECT COUNT(inc.inc_id) AS event_count, 
CASE inc_data.event_type 
WHEN 'c' then case inc_data.sub_event_type 
       when 's' then 'SR' else 'Project' 
       end 
WHEN 'i' then 'incident' 
WHEN 'p' then 'Problem'  
WHEN 'd' then 'Decision' 
WHEN 't' then 'Task' 
end "event_sub_type" 
FROM inc INNER JOIN inc_data ON inc.inc_id = inc_data.inc_id  
GROUP BY inc_data.event_type, inc_data.sub_event_type 

Retours:

+-------------+----------------+ 
| event_count | event_sub_type | 
+-------------+----------------+ 
|   5 | Project  | 
|   10 | Decision  | 
|   15 | Incident  | 
|   20 | Problem  | 
|   25 | Task   | 
|   30 | SR    | 
+-------------+----------------+ 

Sortie prévue:

+-------------+----------------+ 
| event_count | event_sub_type | 
+-------------+----------------+ 
|   5 | Project  | 
|   25 | Others   | 
+-------------+----------------+ 

Comment puis-je modifier la requête ci-dessus pour obtenir le résultat attendu?

+0

Vous voulez juste pour filtrer ces deux dossiers? –

+0

Oui, et fusionné d'autres –

+0

Eh bien qu'est-ce que vous utilisez? MySQL ou Sql Server? Ils ne sont pas du tout les mêmes, et Sql Server pourrait être capable de résoudre cela via des fonctions de fenêtrage que MySql ne peut pas utiliser. –

Répondre

2

Pourriez-vous essayer ça?

SELECT COUNT(inc.inc_id) AS event_count, 
(CASE WHEN (inc_data.event_type = 'c' AND inc_data.sub_event_type <> 's') THEN 'Project' ELSE 'Others' END) "event_sub_type" 
      FROM inc INNER JOIN 
      inc_data ON inc.inc_id = inc_data.inc_id 
GROUP BY (CASE WHEN (inc_data.event_type = 'c' AND inc_data.sub_event_type <> 's') THEN 'Project' ELSE 'Others' END) 
0

Que diriez-vous

SELECT COUNT(inc.inc_id) AS event_count, 
    CASE inc_data.event_type 
    WHEN 'c' then case inc_data.sub_event_type 
       when 's' then 'Other' else 'Project' 
       end 
    ELSE 'Project' 
    END "event_sub_type" 
FROM inc INNER JOIN inc_data ON inc.inc_id = inc_data.inc_id  
GROUP BY inc_data.event_type, inc_data.sub_event_type 
-1

En fonction de votre sortie, je suppose que vous utilisez MySQL.

MySQL vous permet de regrouper par nombre de colonnes, vous pouvez remplacer votre clause GROUP BY avec ceci:

GROUP BY 1, 2 
+0

Permet, oui. Bonnes pratiques? Pas souvent. –