2013-03-14 74 views
0

這裏是我的查詢:如何獲得基於不同列值的COUNT值?

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; 

第一列顯示兩個不同的年份值由2007年2008年跟着我試圖得到一個基於兩個不同年份各品牌汽車的表中的計數值。我想我的輸出如下所示(它目前有相同的計數值都爲2008年和2007年):

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

任何幫助或建議將不勝感激。

回答

3

使用GROUP BY與條件SUMSUMCASE):

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) 
+0

感謝您抽出寶貴的時間來回答我的問題,我永遠不會有這種想法。 – user1323056 2013-03-14 00:22:23