2012-05-24 1 views
0

특정 열에 암호화 또는 거부가 나타나는 횟수를 계산하려고합니다. 내가 추가 할 때 내부 조인을 사용할 때 SQL 쿼리가 비정상 계산 된 횟수를 반환합니다.

Number of Devices SiteCode Country Encrypted Denied 
     3    REN Greece 0   3 

그러나 내부는

FROM dbo.DeviceData JOIN dbo.SiteList ON dbo.DeviceData.country = dbo.SiteList.Country 

(33)에 대한 거부 변경 횟수에 가입 : 아래의 코드는 문제에서

use DEW 
SELECT Count (distinct DeviceData.machinename) As [Number Of Devices], 
DeviceData.CurrentSite, DeviceData.Country 
    ,sum(case buildstatus when 'encrypted' then 1 else 0 end) encrypted 
    ,sum(case buildstatus when 'Denied' then 1 else 0 end) Denied 
FROM dbo.DeviceData 
where currentsite = 'REN' 
group by DeviceData.Country, CurrentSite 

OUPUT이처럼 함께 있음을 반환합니다.

왜 SQL이 이런 이유입니까?

+0

select 및 그룹별로 더 많은 열을 추가하고 있습니까? –

+0

샘플 데이터를 입력하십시오. – RedFilter

+0

하나의 DeviceData에 대해 하나의 SiteList 만 있습니까? 'FROM dbo.DeviceData JOIN dbo.SiteList ON dbo.DeviceData.country = dbo.SiteList.Country' –

답변

3

나는 SiteList 테이블에 그리스에 11 개의 사이트가 있다고 상상한다. 따라서 결과는 예상대로입니다.

다음 한 경우 :

SELECT 
    DeviceData.machinename, 
    SiteList.Country, 
    SiteList.Site, -- Or whatever the column is called... 
FROM dbo.DeviceData JOIN 
    dbo.SiteList ON 
     dbo.DeviceData.country = dbo.SiteList.Country 

당신은 33 개 행이 반환되는 표시됩니다

MACHINENAME COUNTRY SITE 
Machine#1  Greece  Site1 
Machine#1  Greece  Site2 
Machine#1  Greece  Site3 
Machine#1  Greece  Site4 
Machine#1  Greece  Site5 
Machine#1  Greece  Site6 
Machine#1  Greece  Site7 
Machine#1  Greece  Site8 
Machine#1  Greece  Site9 
Machine#1  Greece  Site10 
Machine#1  Greece  Site11 
Machine#2  Greece  Site1 
Machine#2  Greece  Site2 
Machine#2  Greece  Site3 
Machine#2  Greece  Site4 
etc... 

나는 당신이 필요로하는 수정이 Site 아닌 Country에 가입하는 것입니다 생각합니다.

FROM dbo.DeviceData JOIN 
     dbo.SiteList ON 
      dbo.DeviceData.CurrentSite = dbo.SiteList.Site 
+0

그리스 사이트 목록 테이블에는 11 개의 사이트가 있습니다. 그러나 내가 devicedata 테이블에 나타난 거부 횟수를 세지려고한다면 출력이 11 배로 증가하는 이유는 무엇입니까? – chemist

+0

고마워! 그것은 그것을 고쳤다. – chemist

관련 문제