1

一連の結合ですべての (米国) 州の数を一覧表示するクエリを作成しようとしています。これにより、残りのデータには表示されないテーブルで定義されたすべての州に 0 が表示されます。

これは私がこれまでに思いついたものです:

SELECT s.StateName,s.StateNum, COUNT(s.StateNum) as [count]
FROM States AS s
INNER JOIN StateIncludeInClueReport as scr ON scr.statenum = s.StateNum
LEFT JOIN Staging_Policy sp ON CONVERT(TINYINT,SUBSTRING(sp.ProducerCode,1,2)) = s.StateNum
left JOIN (SELECT MIN(sip.QuoteId)AS QuoteId,sip.rmId FROM Staging_Policy sip GROUP BY sip.RMID) as sq ON sq.QuoteId = sp.QuoteID
INNER JOIN dbo.ResultMaster AS rm ON rm.rmID = sq.RMID
INNER JOIN dbo.CreditReport AS cr ON rm.rmID = cr.rmID AND cr.PolType = 'AUTO 3.0'
GROUP BY CONVERT(TINYINT,SUBSTRING(sp.ProducerCode,1,2)), s.StateName, s.StateNum
ORDER BY s.StateNum

しかし、残りのデータに表示されないレコードはまだ表示されていません。

指定された scema とサンプル データを使用して sqlFiddle を作成しました。

現在の出力は次のとおりです。

STATENAME   STATENUM    COUNT
Kentucky    16          14
Ohio        34          4

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

STATENAME   STATENUM    COUNT
Arkansas    3           0
Georgia     10          0
Indiana     13          0
Kentucky    16          14
Missouri    24          0
Ohio        34          4
Tennessee   41          0
Texas       42          0
Virginia    45          0

私は実際には SQL の専門家ではありませんが、これは本当に私に問題を引き起こしています。誰かが私が間違っていることについていくつかの洞察を持っていますか?

4

1 に答える 1

2

LEFT JOINほとんどの結合で使用するなど、クエリにいくつかの変更を加えました。

SELECT s.StateName,
  s.StateNum,
  isNull(COUNT(cr.PolType), 0) as [count]
FROM States AS s
INNER JOIN StateIncludeInClueReport as scr 
  ON scr.statenum = s.StateNum
LEFT JOIN Staging_Policy sp 
  ON CONVERT(TINYINT,SUBSTRING(sp.ProducerCode,1,2)) = s.StateNum
LEFT JOIN 
(
  SELECT MIN(sip.QuoteId)AS QuoteId, sip.rmId 
  FROM Staging_Policy sip GROUP BY sip.RMID
) as sq 
  ON sq.QuoteId = sp.QuoteID
LEFT JOIN dbo.ResultMaster AS rm 
  ON rm.rmID = sq.RMID
LEFT JOIN dbo.CreditReport AS cr 
  ON rm.rmID = cr.rmID
  AND cr.PolType = 'AUTO 3.0'
GROUP BY CONVERT(TINYINT,SUBSTRING(sp.ProducerCode,1,2)), s.StateName, s.StateNum
ORDER BY s.StateNum;

デモで SQL Fiddle を参照してください

于 2012-09-18T16:03:12.807 に答える