web-dev-qa-db-fra.com

Comment sélectionner des données avec une déclaration de cas et les regrouper par?

J'essaie de manipuler un peu les données en utilisant une déclaration de cas, mais je n'arrive pas à le comprendre.

Stops
--------------------
1Stop
1-Stop
1 stop
1 Stop
1stop
1 Stop
2-Stop

J'essaie de trouver:

1-Stop.... 6
2-Stop.... 1

Ce que j'ai essayé c'est:

select CASE when 
Stops = '1Stop' OR 
Stops = '1 Stop' OR 
Stops = '1 stop' then '1-Stop' 
ELSE Stops END, count(*) 
from table group by Stops
6
KingKongFrog

Le problème est que vous ne pouvez pas utiliser l'alias Stops dans le GROUP BY. Dans votre requête lorsque vous utilisez le GROUP BY il utilise les valeurs individuelles pour chaque ligne. Vous devez utiliser une sous-requête pour obtenir le résultat:

select stops, count(*) Total
from  
(
  select 
    CASE 
      when Stops in ('1Stop', '1 Stop', '1 stop') then '1-Stop' 
      ELSE Stops
    END as Stops
  from yourtable
) d
group by stops;

Voir SQL Fiddle with Demo .

Ou si vous ne souhaitez pas utiliser de sous-requête, vous pouvez répéter l'expression CASE dans le GROUP BY:

select 
  CASE 
    when Stops in ('1Stop', '1 Stop', '1 stop') then '1-Stop' 
    ELSE Stops
  END as Stops,
  count(*)  as Total
from yourtable
group by 
  CASE 
    when Stops in ('1Stop', '1 Stop', '1 stop') then '1-Stop' 
    ELSE Stops
  END 

Voir SQL Fiddle with Demo

9
Taryn