分组表

时间:2017-02-20 11:31:20

标签: sql-server sql-server-2008 sql-server-2008-r2

我的代码是:

SELECT
    Student_ID ,dbo.tblVahed.Vahed_ID,
    COUNT(Student_ID) AS State_All,
    CASE 
       WHEN tblStudentsDocument.Student_Sex = N'مرد'  
          THEN COUNT(Student_ID) 
    END AS Count_Man,
    CASE 
       WHEN tblStudentsDocument.Student_Sex = N'زن'  
          THEN COUNT(Student_ID) 
    END AS Count_Woman 
FROM         
    dbo.tblStudentsDocument 
INNER JOIN
    dbo.tblVahed ON dbo.tblStudentsDocument.Vahed_ID = dbo.tblVahed.Vahed_ID
GROUP BY 
    dbo.tblVahed.Vahed_ID, Student_ID, Student_Sex 

但我应该只group by dbo.tblVahed.Vahed_ID。任何有用的帮助。

1 个答案:

答案 0 :(得分:0)

任何未在SELECT字段列表中聚合的内容都必须包含在组中。如果您不想通过它进行分组,那么您不应该将其包含在未加聚合的选择列表中。您的查询应该如下工作。

SELECT dbo.tblVahed.Vahed_ID, 
    COUNT( Student_ID) AS State_All , 
    SUM(CASE WHEN tblStudentsDocument.Student_Sex = N'مرد' THEN 1 ELSE 0 END) AS Count_Man ,
    SUM(CASE WHEN tblStudentsDocument.Student_Sex = N'زن' THEN 1 ELSE 0 END) AS Count_Woman
FROM dbo.tblStudentsDocument 
    INNER JOIN dbo.tblVahed ON dbo.tblStudentsDocument.Vahed_ID = dbo.tblVahed.Vahed_ID
GROUP BY dbo.tblVahed.Vahed_ID

注意我已删除了学生ID,并重写了case语句以不同的方式执行聚合。