2016-09-12 4 views
1

SELF JOINとCOUNTを使用すると、COUNTコマンドを使用すると異なる結果が表示される理由を誰かが説明できますか? 同じテーブルControlNoの列。列の値はユニークではありません。 このクエリでは、合計カウントが15586になります。SELF JOINでCOUNTを使用すると異なる結果の値が返される

select (Select COUNT(ControlNo) 
       from tblQuotes Q1 
       where Q1.ControlNo = a.ControlNo 
      ) QuotedTotal 
    FROM tblQuotes a 
    inner join lstlines l on a.LineGUID = l.LineGUID 
    where l.LineName = 'EARTHQUAKE' AND YEAR(EffectiveDate) = 2016 

enter image description here

しかし、私はこのクエリを実行した場合、その後、それは私に15095の合計数を提供します。

select COUNT(ControlNo) as QuotedTotal 
from tblQuotes a 
inner join lstlines l on a.LineGUID = l.LineGUID 
    where  l.LineName = 'EARTHQUAKE' AND YEAR(EffectiveDate) = 2016 

enter image description here

正確に合計金額を変更し、その理由は何? なぜ最初のシナリオを使用するのですか? そして、最初のクエリを修正して、各行で分割することなく15586の合計を得る方法はありますか? は、すべてではないそれらのは、その条件でlstlinesテーブルに対して参加するものの、フィールドControlNoが一意でないと、その値を共有するいくつかのレコードがあるためと考えられるあなた

+0

まず、テーブル構造を共有すると役立ちます。 'ControlNo'はユニークなフィールドですか? 'ControlNo'フィールドの値を共有する' tblQuotes'にはいくつかの行があるようですが、それらのすべてが 'lstlines'テーブルと結合するわけではありません。それらを数える必要がありますか? – Andrew

+0

列 'ControlNo'は一意ではないため、結果が異なる可能性があります。 – Oleg

答えて

1

ありがとうございます。だから、基本的にはあなたの最後のクエリが行われます。

SELECT COUNT(a.ControlNo) 
FROM lstlines l 
INNER JOIN tblQuotes a ON a.LineGUID = l.LineGUID 
WHERE l.LineName = 'EARTHQUAKE' AND YEAR(EffectiveDate) = 2016 

最初のものは基本的に行いながら:

SELECT COUNT(b.ControlNo) 
FROM lstlines l 
INNER JOIN tblQuotes a ON a.LineGUID = l.LineGUID 
INNER JOIN tblQuotes b ON a.ControlNo = b.ControlNo 
WHERE l.LineName = 'EARTHQUAKE' AND YEAR(EffectiveDate) = 2016 

あなたはあなただけのlstlinesテーブルに一致する行をカウントしていない、この2番目のクエリでは、見ることができるように、 lstlinesと一致するものと同じControlNoを持つtblQuotesのすべての行も表示されます。

+0

助けになるのはうれしいです。偶然、これらのクエリはクエリと同じ番号を返しますか? – Andrew

+0

いいえ、同じ番号を返しません。それはどうすれば正しいはずですか? – Oleg

+0

いいえ、最初のクエリが15095を返し、2番目のクエリが2つのクエリのように15586を返すことを意味します。 – Andrew

関連する問題