0

Encrypted または Denied が特定の列に表示される回数を数えようとしています。以下のコードは問題なくそれを返します

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

出力は次のようになります。

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 に。

SQLがこれを行う理由は何ですか?

4

1 に答える 1

3

表にはギリシャのサイトが 11 あると思いSiteListます。したがって、結果は予想どおりです。

次の操作を行った場合:

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
于 2012-05-24T14:49:22.987 に答える