web-dev-qa-db-ja.com

ケースステートメントでデータを選択してグループ化するにはどうすればよいですか?

Caseステートメントを使用してデータを少し操作しようとしていますが、理解できないようです。

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

私は思いつくことを試みています:

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

私が試したのは:

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

問題は、GROUP BYでエイリアスStopsを使用できないことです。 GROUP BYを使用している場合のクエリでは、各行の個別の値を使用しています。結果を取得するには、サブクエリを使用する必要があります。

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;

SQL Fiddle with Demo を参照してください。

または、サブクエリを使用しない場合は、GROUP BYCASE式を繰り返すことができます。

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 

参照 SQL Fiddleデモあり

9
Taryn