给出以下查询,该查询将给出给定注册(科目)的姓史密斯的学生人数
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
是否可以将“Smith”作为参数,例如这样
COUNT((CASE WHEN s.Surname LIKE @Surname THEN 1 ELSE NULL END)) AS CountIf
最佳答案
如果将 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
关于.net - 选择参数中的 TSQL 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11533961/