2011-08-31 96 views
0

有两个三个表,一个是学生,第二个是班级,第三个是性别。我试图获得每个性别的总数和百分比。我用下面的statment获得的数量和它工作得很好:SQl选择百分比

SELECT Gender.GenderName as Gender, COUNT(*) as cnt 
FROM   (Client INNER JOIN 
      Gender ON Student.GenderID = Gender.GenderID) 
      GROUP BY Gender.GenderName 

我无法弄清楚我如何能得到percenage,还怎么做类名或ID作为作为可选项目以获得每个性别类或所有类通过使用@ClassId int。

回答

0

我目前无权访问SQL Server,但可以使用CastConvert转换为浮动类型。或者你可能想引用你的SQL Server文档中的特定类型转换函数。

SELECT a.Gender, a.cnt, Cast(a.cnt as float)/b.cnt * 100 
    FROM (SELECT Gender.GenderName as Gender, COUNT(*) as cnt 
      FROM Client 
    INNER JOIN Gender 
      ON Student.GenderID = Gender.GenderID 
     GROUP BY Gender.GenderName) a 
    CROSS JOIN (SELECT COUNT(*) as cnt FROM student) b 

PS:谢谢你指出我的错误。 a.cnt/b.cnt会做整数运算,并返回零,如果b.cnt> a.cnt(在这种情况下,它会)...我们需要将a.cntb.cnt转换为浮点数,因此a.cnt/b.cnt成为浮点数,然后再乘以100给你的百分比。另外,我错过了GenderName在内部SELECT中被混淆了。

+0

谢谢Nabheet,我得到错误列名'gendername'无效。在表中它是GenderName,我chnaged它性别名仍然我得到相同的错误 – hncl

+0

我刚刚建议编辑这个答案,因为它是99%正确的。基本上,您需要将'Gender'更改为'GenderName',然后将'b.cnt'转换为浮动类型。其余的工作正常。 –

+0

谢谢保罗,我做了更改,但是我得到的百分比是0(没有列名)。你能否介绍一下如何将b.cnt转换为浮动类型。 – hncl