2012-03-31 42 views
2

我只是遇到了麻煩,無法對我需要的查詢進行分類。我有這樣在mysql查詢中對數據進行分組或數據透視,使行成爲列

colDist  colGender   attnedancePrcnt 
Place-1  Male     2.5 % 
Place-1  Female    1.5% 
Place-2  Male     3.5% 
Place-2  Female    2.1% 

的情景現在我需要在mysql中查詢到有這樣

colDist  colMale   colFemale 
Place-1  2.5%    1.5 % 
Place-2  3.5%    2.1 % 

數據這有點組由coldDist但我只是面臨的麻煩,使colMale並從第一個數據集colfemale到第二個。

高級謝謝。

這種方法.....

select colDist, if(colGender='Male',colGender,null) as colMale , 
     if(colGender='Female',colGender,null) as colFemale 
from tablename 

給了我這樣的

colDist  colMale   colFemale   attnedancePrcnt 
Place-1  Male    NULL     2.5 
Place-1  NULL    Female    1.5 
Place-2  Male    NULL     3.5 
Place-2  NULL    Female    2.1 

的結果,但我又需要他們這樣的:

colDist  colMale   colFemale 
Place-1  2.5%    1.5 % 
Place-2  3.5%    2.1 % 

那麼怎麼可以根據需要對數據進行分組或轉儲?

謝謝。

+0

這被稱爲數據透視表,並有許多像這樣的答案在SO上:http://stackoverflow.com/questions/5846007/sql-query-to-pivot-a-column-using-case-when – liquorvicar 2012-03-31 07:51:32

回答

1
SELECT 
    t1.colDist, 
    t1.attnedancePrcnt AS colMale, 
    t2.attnedancePrcnt AS colFemale 
FROM 
    tablename AS t1 
INNER JOIN tablename AS t2 ON t1.colDist = t2.colDist 
AND t1.colGender != t2.colGender 
WHERE 
    t1.colGender = 'Male' 

另外值得一提的是,「attnedance」應拼寫「出勤」。

+0

非常感謝MR ....它爲我工作。並感謝您糾正出席! – 2012-03-31 07:36:43

+0

不用擔心。當您接受答案時,您需要點擊答案旁邊的勾號。它將它推到列表的頂部,當人們重新查看問題時,他們可以很容易地看到哪個答案是正確的。 – MichaelRushton 2012-03-31 07:55:19

+0

噢好吧,我現在知道了...... :) – 2012-03-31 18:48:59

1

檢查是否符合您的要求它的工作原理:

select colDist, if(colGender='Male',colGender,null) as colMale , 
     if(colGender='Female',colGender,null) as colFemale 
from tablename 
+1

謝謝接近很多,但我需要他們基於colDist的團隊,因爲您已經注意到Place-1和Place-2。在你的解決方案中,我發現如果那是女性並且是惡習,男性專欄是空的。 – 2012-03-31 06:03:54

+0

你是否建議我使用pivot qury,儘管我沒有深入的數據透視查詢。 – 2012-03-31 06:18:15

+1

檢查此:希望它會幫助你http://stackoverflow.com/questions/1241178/mysql-rows-to-columns – 2012-03-31 07:24:03