2017-12-06 21 views
0

count = 0 일 때 null 값을 얻으려고합니다. 다음은 특정 기준에 맞는 사이트 수를 계산하는 데 사용하는 코드입니다. 이 경우 11 또는 21로 시작하는 코드가 있습니다. 비슷한 구조의 질문이 있지만 마치 내 것이 더 단순한 것처럼 보입니다. 내가 (다른 질문이 말한대로 집계 테이블) 지역이 그 다음 왼쪽 가입 할 나열하는 별도의 테이블을 구성 할 필요가있는 것처럼 LEFT JOIN을 통한 지원.

SELECT 
[Area], 
COUNT(*) AS [Number of Sites] 
FROM 
dbo.sizeclassreport 
Where area='000005' and (code like '11%' or code like '21%') 
GROUP BY 
[area] 
UNION ALL 

그래서 응답에서, 그것은 보인다. 아래는 나의 첫번째 시도이다.

Create TABLE areas 
(
Area char(6), NOT NULL 
CONSTRAINT PK_AREAS PRIMARY KEY (areas) 

Select * from areas 
LEFT JOIN dbo.sizeclassreport ON areas.areas = area.sizeclassreport 
COUNT(*) AS [Number of Sites] 
FROM 
dbo.sizeclassreport 
Where area='000005' and (code like '11%' or code like '21%') 
GROUP BY 
[area] 
UNION ALL 
+0

계산할 행이 없으므로 절대로 0이되지 않습니다. 모든 영역을 나열하는 표를 사용하여 쿼리를 왼쪽으로 채워야합니다. – Barmar

+0

[0 카운트로 카운트 선택] 가능한 복제본 (https://stackoverflow.com/questions/34934538/select-count-with-0-count) – Barmar

+0

아래 답변은 작동하지만 다른 사람을 위해이 디자인을하고 있습니다. 이 경우 11이 아닌 단일 결과를 원합니다. 그래서,이 왼쪽 조인에 대해. 먼저, 모든 지역 (이 경우 17 개)이있는 테이블을 만듭니다. 이 테이블에는 하나의 열만 있습니다. –

답변

1

데이터가없는 경우 0을 표시 할 행이 없습니다. 그러나 행이 존재하도록 강요 할 수 있습니다. 그런 다음 데이터가 존재하면 표시되고, 그렇지 않으면 coalesce() 함수를 통해 0이됩니다.

SELECT 
     '000005' as area 
    , COALESCE((SELECT COUNT(*) FROM dbo.sizeclassreport 
      WHERE area = '000005' AND code LIKE '11%' OR code LIKE '21%'), 0)