2014-01-19 4 views
3

왜 잘못 생각했는지에 대한 설명을 찾을 수 없습니다. 나는 집계 또는 하위 쿼리가 포함 된 식에서는 집계 함수를 수행 할 수 없습니다 TSQL, COUNT에서 SELECT 문에

가 계속

SELECT 
    COUNT(CASE WHEN (SELECT [Number] FROM [SOMETABLE] WHERE [id] = [GivenId]) = 3 THEN 1 ELSE 0 END) 
FROM [SomeOtherTable] 

: 내가 좋아하는 일을하고 싶습니다.

나는 왜 내가하고 싶은 일을하는지 이해하는 것이 좋을 것이다.

그리고 같은 결과를 얻으려면 다른 순서로 무엇을 할 수 있는지 알고 있어야합니다.

+0

아무에게도 보이지 않습니다. 질문에 나쁘다. – user1940676

답변

5

관련없는 테이블과 함께 COUNT (집계 함수)를 사용할 수 없습니다. 즉, [SOMETABLE] 테이블과 [SomeOtherTable] 테이블간에 관계가 있어야합니다.

것이이 일을하는 한 가지 가능한 방법

:

create table yourtable (id int, graduates int, group_code varchar(100)); 

insert into yourtable values 
(1, 50, 'others'),(1, 20, 'something'), (2, 20, 'total'), (3, 35, 'total2'), 
(4, 40, 'total3'); 

create table othertable (ids int, graduate int, class varchar(100)) 
insert into othertable values (3,2, 'others') 

귀하의 수정 문 :

SELECT SUM(CASE WHEN (o.ids) = 3 THEN 1 ELSE 0 END) 
FROM yourtable as y inner join othertable as o on y.group_code = o.class 
where o.graduate = 2 

SQL code here

이 링크에 액세스하지 못할 경우, 여기에 스키마 코드 ** 고마워요 자일즈, 집계 합계 함수를 SUM으로 변경했습니다

+0

이건'SELECT SUM (사례금 (O.ids) = 3 THEN 1 ELSE 0 END)'이 아니어야합니까? Count는 1 또는 0 여부에 관계없이 레코드 수를 반환하므로 위의 결과는 기본 쿼리에서 반환 한 레코드 수와 같습니다. –

+0

자일즈가 맞습니다. 답변을 업데이트했습니다. – Abhinav