2015-03-31 101 views
0

你好傢伙我有一個SQL查詢,可以找到一些範圍之間的列的總和。 查詢低於SQL查詢,如何以行智能格式顯示結果?

select sum(case when rating_value between 0 and 1.9 then 1 end) as Poor, sum(case when rating_value between 2 and 2.9 then 1 end) as Average, sum(case when rating_value between 3 and 3.9 then 1 end) as Good, sum(case when rating_value between 4 and 5 then 1 end) as Very_Good from rating

其輸出這樣

poor | good | verygood | average 39 | 131 | 231 | 552

但我想是這樣

Rating | Count or Value 
----------------------- 
Poor  31 
Good  21 
Average  552 
very good 231 

輸出希望一個肯定的答覆

回答

1

使用group bycase聲明:

select (case when rating_value between 0 and 1.9 then 'Poor' 
      when rating_value between 2 and 2.9 then 'Average' 
      when rating_value between 3 and 3.9 then 'Good' 
      when rating_value between 4 and 5 then 'Very_Good' 
     end) as grp, count(*) 
from rating 
group by grp 
order by min(rating_value); 
+0

謝謝..戈登它的工作。抱歉不能投票支持這個答案bcoz我沒有太多的聲望。 – 2015-04-16 08:59:33

0

使用這個..

select 
(case when rating_value between 0 and 1.9 then 'Poor' 
case when rating_value between 2 and 2.9 then 'Average' 
case when rating_value between 3 and 3.9 then 'Good' 
case when rating_value between 4 and 5 then 'Very_Good' 
end) as rate, count(*) AS cnt 
from rating 
group by rate 
order by cnt 
0

您可以使用UNPIVOT如下

SELECT Rating,Value FROM(

select 10 as Poor,20 as Average,45 as Good,15 as Very_Good /*Your Query*/ 

) AA 
UNPIVOT 
(Value FOR Rating IN ([Poor],[Average],[Good],[Very_Good])) BB 
0

同爲以前的答案,只是不使用之間使用較少的字母代碼:)

SELECT 
    (CASE WHEN rating_value < 2 THEN 'Poor' 
      WHEN rating_value < 3 THEN 'Average' 
      WHEN rating_value < 4 THEN 'Good' 
      WHEN rating_value <= 5 THEN 'Very_Good' 
     END) AS rate , 
    COUNT(*) 
FROM 
    rating 
GROUP BY 
    grp 
ORDER BY 
    1;