2014-12-04 4 views
1

예, 거기에는 수십 개의 유사한 질문이 있어야하며 문자 그대로 20 또는 30 개의 순열을 시도했지만 여전히 난처한 상태입니다. 여기에 간단한 감소이다 : MyMethodNbr 목록에서sql count/group by/zero

select MyMethodNbr, count(*) from MyDB 
where MyMethodNbr in (33, 57, 150, 160, 200, 240) 
group by MyMethodNbr 
order by MyMethodNbr ASC 

일부 항목은 테이블에 존재하지 않는,하지만 난 제로에 널 (null)을 변환 할. 0이 아닌 개수의 테이블 만 얻을 수 있습니다.

+0

dbms oracle 또는 mysql 또는 sql server? 33이 없으면이 값에 대해 0을 원하십니까? – radar

+0

MS SQL. 네, 33이 존재하지 않는다면 제로 카운트를 원합니다. 그게 문제 야 ... –

답변

1

left join을 사용하면이 작업을 수행 할 수 있습니다. 일부 데이터베이스에서

select n.n as MyMethodNbr, count(MyDB.MyMethodNbr) as num 
from (select 33 as n union all select 57 union all select 150 union all select 160 union all 
     select 200 union all select 240 
    ) n left join 
    MyDB 
    on MyDB.MyMethodNbr = n.n 
group by n.n 
order by num ASC; 

, 당신은 숫자의 목록을 작성 from dual 또는 유사한 구조를 필요 : 여기에 일반적인 구문입니다.

+0

흠 ... 내 목록이 100 개 품목이라면 어떨까요? 이것은 조금 부피가 보인다. 내 원래 버전에서는 "IN"목록의 모든 항목을 포함하는 다른 테이블과 함께 왼쪽 조인을 사용했지만 관심이없는 다른 항목도 표시했습니다. –

+0

@nas. . . 어떻게 든 목록을 생성해야합니다. Excel이 유용 할 수 있습니다. 또는 목록이 다른 쿼리를 기반으로하는 경우 해당 쿼리를 사용합니다. –

-1
select ISNULL(MyMethodNbr,0), count(*) from MyDB 
where MyMethodNbr in (33, 57, 150, 160, 200, 240) 
group by MyMethodNbr 
order by MyMethodNbr ASC