2012-07-18 134 views
2

考虑下面的查询,这将给学生姓史密斯的数的计数对于给定的报名(主题)TSQL计数

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和SUM为0,而不是空else部分,它应该工作是这样的

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

回答

3

,不是吗?

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 
+0

貌似选择子句将工作在参数。只需要测试什么时候从.NET代码中调用。 – Craig 2012-07-18 03:51:38

+0

@Craig它也能工作。应该没有任何区别。 – Icarus 2012-07-18 03:53:49

+0

谢谢,我真的不认为参数选择将工作。 – Craig 2012-07-18 03:54:47