2011-01-15 8 views
0

이 문제는 내가 지금 당장 원으로 돌아가고 누군가가 잘못된 점에 관해서 어떤 포인터를 줄 수 있는지 궁금합니다.CTE Join query issues

지난 6 개월의 그래프에 대해 SSRS에서 호출 할 데이터 집합을 생성하는 SPROC를 생성하려고합니다.

예시적인 목적을위한 데이터는 세 개의 테이블을 사용하는 (기타 프로그래머를하지만 그 습관 당면한 문제 변경) 다음과 같습니다

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_FeedBack 요청 :

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을 반환하고 있습니다. [날짜], 그러나 trtm에 LEFT JOIN이 있으므로 이 존재하지 않을 수 있습니다.
항상이있는 경우 INNER JOIN으로 바꾸고 다른 LEFT JOIN을 trtm. [Date]의 링크를 포함하도록 변경하십시오. [Date]. fbr. [Date].
그렇지 않으면 월 목록을 반환하고 날짜 필드의 trtm 및 fbr (사이트의 기존 조인과 마찬가지로)에서 왼쪽 조인을해야합니다.