Базовый SQL - нужен второй столбец Count () - PullRequest
1 голос
/ 02 февраля 2012
SELECT a.ClassName, b.TeacherName, COUNT(c.Class_ID)
from dbo.Class a
inner join dbo.Teacher b on a.Teacher_ID = b.Teacher_ID
left outer join dbo.ClassRegistration c on a.Class_ID = c.Class_ID
group by a.ClassName, b.TeacherName 

В настоящее время у меня есть вышеуказанный SQL-скрипт. Он работает нормально, идея состоит в том, чтобы отобразить ClassName, TeacherName и счетчик того, сколько раз этот класс появляется в таблице ClassRegistration. Теперь следующая часть, где я немного застрял. В таблице ClassRegistration также есть столбец с именем «HasPaid». Мне нужно добавить 2-й столбец счета, который будет отображать, сколько "ClassRegistration's" было оплачено.

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Если это на SQL-сервере, и если столбец HasPaid имеет тип bit, вы можете попробовать что-то подобное

SELECT a.ClassName, b.TeacherName, COUNT(c.Class_ID), SUM( CASE HasPaid WHEN 1 THEN 1 ELSE 0 END )
from dbo.Class a
inner join dbo.Teacher b on a.Teacher_ID = b.Teacher_ID
left outer join dbo.ClassRegistration c on a.Class_ID = c.Class_ID
group by a.ClassName, b.TeacherName 
1 голос
/ 02 февраля 2012

Попробуйте:

SELECT 
  a.ClassName, 
  b.TeacherName, 
  COUNT(c.Class_ID),
  COUNT(CASE c.HasPaid WHEN 1 THEN c.Class_ID ELSE NULL END)
from dbo.Class a
inner join dbo.Teacher b 
  on a.Teacher_ID = b.Teacher_ID
left outer join dbo.ClassRegistration c 
  on a.Class_ID = c.Class_ID
group by a.ClassName, b.TeacherName 

, если HasPaid имеет тип BIT, вы можете упростить подсчет секунд следующим образом:

SUM(CAST(HasPaid AS INT))
...