2

给定以下查询,它将计算给定入学(科目)姓氏史密斯的学生人数

SELECT 
  e.EnrolmentId,
  COUNT((CASE WHEN s.Surname LIKE 'Smith' THEN 1 ELSE NULL END)) AS CountIf
FROM 
  Enrolment e
INNER JOIN StudentEnrolment se
  ON e.EnrolmentId = se.EnrolmentId
INNER JOIN Student s
  ON se.StudentId = s.StudentId
GROUP BY
  e.EnrolmentId

是否可以将“史密斯”作为参数,像这样

COUNT((CASE WHEN s.Surname LIKE @Surname THEN 1 ELSE NULL END)) AS CountIf
4

1 回答 1

3

如果您将 COUNT 更改为 SUM 并将 ELSE 部分更改为 0 而不是 NULL,它应该可以工作,不是吗?

SELECT 
  e.EnrolmentId,
  SUM((CASE WHEN s.Surname LIKE 'Smith' THEN 1 ELSE 0 END)) AS CountIf
FROM 
  Enrolment e
INNER JOIN StudentEnrolment se
  ON e.EnrolmentId = se.EnrolmentId
INNER JOIN Student s
  ON se.StudentId = s.StudentId
GROUP BY
  e.EnrolmentId

例子:

declare @t as varchar(20)
select @t='ricardo'

declare @ta as table
(
    name varchar(30)
)

insert into @ta
values
('juan'),
('ricardo'),
('pablo')


select
SUM((CASE WHEN name LIKE @t THEN 1 ELSE 0 END)) AS CountIf
from @ta

输出:

CountIf
-----------
1
于 2012-07-18T03:43:17.787 回答