2013-03-05 32 views
0

全部,如何編寫一個SQL查詢爲字段的每個可能的值創建一個單獨的列?

對不起 - 這可能是一個非常簡單的SQL問題,但我無法弄清楚如何編寫Google搜索來獲得我需要的。

我有一個表,看起來像這樣:

id color points 
--- ----- ------ 
    1 red  10 
    2 blue  20 
    3 blue  30 
    4 red  100 
    5 blue  70 
    6 blue  200 
    7 red  30 

我想知道兩件事情:

  1. 多少行顏色=「紅色」,以及有多少顏色= '藍色'?
  2. color ='red',color ='blue'的行的總點數是多少?

使用count()sum()group by,我可以很容易地創建一個結果集,看起來像這樣:

select 
    color, 
    count(color), 
    sum(points) 
from 
    my_table 
group by 
    color 

color count points 
----- ----- ------ 
red  3  140 
blue  4  320 

不過,我真正想要的是一個行的結果看起來是這樣的:

red_count red_points blue_count blue_points 
--------- ---------- ---------- ----------- 
     3   140   4   320 

什麼是值得的 - 我理想的查詢不需要靈活處理未定數量的不同顏色;假設總是隻有兩種顏色,我100%可以。

另外 - 在這種情況下,我使用的是SQL Server,如果解決方案使用特定的東西,我很好。 (當然,通用的SQL解決方案會更好......)

在此先感謝!

回答

3

試試這個通用查詢:

SELECT SUM(CASE WHEN color='red' THEN 1 ELSE 0 END) red_count 
     ,SUM(CASE WHEN color='red' THEN points ELSE 0 END) red_points 
     ,SUM(CASE WHEN color='blue' THEN 1 ELSE 0 END) blue_count 
     ,SUM(CASE WHEN color='blue' THEN points ELSE 0 END) blue_points 
FROM yourTable 
3
SELECT SUM(CASE WHEN color = 'red' THEN 1 ELSE 0 END) red_count, 
     SUM(CASE WHEN color = 'red' THEN points ELSE 0 END) red_points, 
     SUM(CASE WHEN color = 'Blue' THEN 1 ELSE 0 END) blue_count, 
     SUM(CASE WHEN color = 'Blue' THEN points ELSE 0 END) blue_points 
FROM tableName 
+1

JW - 一個偉大的答案感謝!看起來你,XLAnt和JW都有同樣的答案;如果你不介意,我會得到XLAnt的複選標記,因爲看起來你需要的分數低於他/她。讓我知道如果這不公平。 – mattstuehler 2013-03-05 15:54:34

3

您可以支點使用聚合和CASE表達數據:

select 
    sum(case when color = 'red' then 1 else 0 end) red_count, 
    sum(case when color = 'red' then points end) red_points, 
    sum(case when color = 'blue' then 1 else 0 end) blue_count, 
    sum(case when color = 'blue' then points end) blue_points 
from my_table 
+1

bluefeet - 非常感謝您的回答!看起來你,XLAnt和JW都有同樣的答案;如果你不介意,我會得到XLAnt的複選標記,因爲看起來你需要的分數低於他/她。讓我知道如果這不公平。 – mattstuehler 2013-03-05 15:53:53

+0

@mattstuehler這是完全公平的! :) – Taryn 2013-03-05 16:07:18

相關問題