2012-03-31 39 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