Как выбрать из нескольких столбцов, но сгруппировать по 1 столбцу? - PullRequest
3 голосов
/ 27 сентября 2011
SELECT        studentnum
FROM            Atten
WHERE        (att = 'Yes') AND (unitCode = 'MMA1034') 
GROUP BY studentnum
HAVING        (COUNT(*) < 4)

Как выбрать больше столбцов?например, имя студента также?

Ответы [ 3 ]

5 голосов
/ 27 сентября 2011

Если информация об ученике находится в таблице ученика, запрос может выглядеть следующим образом:

SELECT student_name, student_birth_day, studentnum
FROM Student S
RIGHT JOIN (
  SELECT studentnum, count(*) as cnt
  FROM   Attendance
  WHERE (attStatus = 'Yes') 
  AND   (unitCode = 'MMA1034')
  GROUP BY studentnum
  HAVING (COUNT(*) < 4)
) A
ON A.studentnum = S.studentnum
0 голосов
/ 27 сентября 2011

если имя студента существует в той же таблице, вам нужно передать его после вашего студенческого номера, например

SELECT studentnum,student_name

если имя ученика существует в другой таблице, вам нужно использовать объединения.

0 голосов
/ 27 сентября 2011

С GROUP BY (Transact-SQL)

Каждый столбец таблицы или представления в любом неагрегированном выражении в списке должен быть включен в список GROUP BY

Таким образом, вы должны включить его в группу, если он не агрегирован в списке выбора.

Так что, если вы хотите, чтобы student_name в списке выбора был неагрегирован, вам нужно что-токак

SELECT  studentnum,
        student_name
FROM    Attendance 
WHERE   (attStatus = 'Yes') 
AND     (unitCode = 'SIT103') 
AND     (CONVERT(VARCHAR, attDate, 101) < '10/10/2011') 
GROUP BY    studentnum,
            student_name
HAVING  (COUNT(*) < 4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...