2011-01-15 16 views
0

この問題は、現時点では円で回っていて、誰かがどこに間違っているかについてのポインタを与えることができるかどうか疑問に思っています。CTE Joinクエリの問題

私は過去6ヶ月のグラフに対してSSRSから呼び出されるデータセットを生成するSPROCを生成しようとしています。

例示の目的のためのデータは、3つのテーブル使用(詳細theresのは、それは習慣手で問題を変更)以下のようである:

tbl_ReportList:

Report  Site 
---------------- 
North  abc 
North  def 
East  bbb 
East  ccc 
East  ddd 
South  poa 
South  pob 
South  poc 
South  pod 
West  xyz 

tbl_TicketsRaisedThisMonth:

Date      Site  Type  NoOfTickets 
--------------------------------------------------------- 
2010-07-01 00:00:00.000 abc  Support  101 
2010-07-01 00:00:00.000 abc  Complaint  21 
2010-07-01 00:00:00.000 def  Support   6 
... 
2010-12-01 00:00:00.000 abc  Support   93 
2010-12-01 00:00:00.000 xyz  Support   5 

tbl_返品リクエスト:

Date      Site NoOfFeedBackR 
---------------------------------------------------------------- 
2010-07-01 00:00:00.000 abc   101 
2010-07-01 00:00:00.000 def   11 
... 
2010-12-01 00:00:00.000 abc   63 
2010-12-01 00:00:00.000 xyz    4 
SPROCが以下のようにこのような「北」としてパラメータを渡すときに

DECLARE @ReportName VarChar(200) 
SET @ReportName = 'North'; 

WITH TicketsRaisedThisMonth AS 
(
    SELECT 
      [Date], 
      Site, 
      SUM(NoOfTickets) AS NoOfTickets 
    FROM tbl_TicketsRaisedThisMonth 
    WHERE [Date] >= DATEADD(mm, DATEDIFF(m,0,GETDATE())-6,0) 
    GROUP BY [Date], Site 
), 

FeedBackRequests AS 
(
    SELECT 
      [Date], 
      Site, 
      SUM(NoOfFeedBackR) AS NoOfFeedBackR 
    FROM tbl_FeedBackRequests 
    WHERE [Date] >= DATEADD(mm, DATEDIFF(m,0,GETDATE())-6,0) 
    GROUP BY [Date], Site 
), 

SELECT 
    trtm.[Date] 
    SUM(trtm.NoOfTickets) AS NoOfTickets, 
    SUM(fbr.NoOfFeedBackR) AS NoOfFeedBackR, 

FROM tbl_ReportList rpts 

LEFT OUTER JOIN TotalIncidentsDuringMonth trtm ON rpts.Site = trtm.Site 
LEFT OUTER JOIN LoggedComplaints fbr ON rpts.Site = fbr.Site 

WHERE rpts.report = @ReportName 
GROUP BY trtm.[Date] 

そして出力:

は、私は以下のとおりであるコードを、簡単にするためにCTEのを使用してい

Date      NoOfTickets    NoOfFeedBackR 
----------------------------------------------------------------------------------- 
2010-07-01 00:00:00.000    128        112 
2010-08-01 00:00:00.000  <data for that month>  <data for that month> 
2010-09-01 00:00:00.000  <data for that month>  <data for that month> 
2010-10-01 00:00:00.000  <data for that month>  <data for that month> 
2010-11-01 00:00:00.000  <data for that month>  <data for that month> 
2010-12-01 00:00:00.000    122        63 

私が抱えている問題は、クエリを実行すると、毎月128の値が6回、次の月の値が6回繰り返されるなど、毎月の値の繰り返しリストが与えられるということです。 !

+0

テーブル定義はありません。あなたのクエリにマッチする - クエリで参照される 'Reports'は何ですか? 'tbl_ReportList'ですか? –

+0

それを指摘してくれてありがとう、訂正しました。 – Icementhols

答えて

1

月の返却方法を変更する必要があります。あなたの結果セットでは、あなたはtrtmを返しています。[Date]しかし、左へのジョイントでtrtmになるので、が存在しません。
常にが存在する場合は、それをINNER JOINに変えて、他のLEFT JOINにtrtm。[Date]のリンクを含めるように変更してください。
月のリストを返すには、 'months'テーブルが必要です。日付フィールドのtrtmとfbr(および既存のサイトのジョイン)の結合を残してください。