2012-07-18 4 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((CASE WHEN s.Surname LIKE @Surname THEN 1 ELSE NULL END)) AS CountIf 

답변

3

SUM 대신 COUNT를, NULL 대신 ELSE 부분을 0으로 변경하면 작동하지 않을까요?

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

작동합니다 select 절에 매개 변수처럼 보인다. .NET 코드에서 호출 될 때 테스트 할 필요가 있습니다. – Craig

+0

@Craig도 잘 작동합니다. 아무런 차이가 없어야합니다. – Icarus

+0

감사합니다. 정말 select의 매개 변수가 작동하지 않을 것이라고 생각했습니다. – Craig