0

これが私のクエリです:

Select DISTINCT YEAR(THEDELIVERY) as YR,
(Select COUNT(*) from CS462MCMT.vehiclev1 where THEMAKE='Audi') as "No of Audis",
(Select COUNT(*) from CS462MCMT.vehiclev1  where THEMAKE='Volvo') as "No of Volvos",
(Select COUNT(*) from CS462MCMT.vehiclev1  where THEMAKE='Porche') as "No of Porsches",
(Select COUNT(*) from CS462MCMT.vehiclev1  where THEMAKE <> 'Audi' and THEMAKE <> 'Volvo' and THEMAKE <> 'Porche') as "No of Other"
from CS462MCMT.vehiclev1;

最初の列には、2008 年と 2007 年の 2 つの異なる年の値が表示されます。2 つの異なる年の値に基づいて、テーブル内の各ブランドの車の数を取得しようとしています。出力を次のようにしたいと思います (現在、2008 年と 2007 年の両方で同じカウント値になっています)。

Year No of Audis No of Volvos etc.
---- ----------- ------------
2008 1700        3000
2007  300        100

ヘルプやアドバイスをいただければ幸いです。

4

1 に答える 1

3

GROUP BY条件付きで使用するSUM( SUMwith CASE):

SELECT YEAR(THEDELIVERY) AS "Year",
    SUM(CASE THEMAKE WHEN 'Audi' THEN 1 ELSE 0 END) AS "No of Audis",
    SUM(CASE THEMAKE WHEN 'Volvo' THEN 1 ELSE 0 END) AS "No of Volvos",
    SUM(CASE THEMAKE WHEN 'Porsche' THEN 1 ELSE 0 END) AS "No of Porsches",
    SUM(CASE WHEN THEMAKE NOT IN ('Audi','Volvo','Porsche') THEN 1 ELSE 0 END) 
        AS "No of Other"
FROM CS462MCMT.vehiclev1
GROUP BY YEAR(THEDELIVERY)
于 2013-03-14T00:17:16.203 に答える