2017-02-20 1 views
0

Мой код:Группировка в таблице

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. Любая помощь может быть вызвана.

ответ

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 

Примечание. Я удалил идентификатор студента и переписал оператор case для выполнения агрегации по-другому.

+0

бак, но мне нужна группа сумм по Vahed_ID – Saber

+0

Извините, я забыл изменить предложение group by, чтобы удалить два поля, которые не следует сгруппировать. Теперь лучше? –

Смежные вопросы