Проблемы с запросами на присоединение к CTE - PullRequest
0 голосов
/ 15 января 2011

эта проблема заставляет меня кружить голову по кругу в данный момент, и мне интересно, кто-нибудь может дать какие-либо указания относительно того, где я иду не так.

Я пытаюсь создать SPROC, который создает набор данных, который будет вызываться SSRS для графиков за последние 6 месяцев.

Данные в качестве примера используют три таблицы (есть больше, но они не изменит проблему под рукой) и следующие:

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_FeedBackRequests:

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

Я использую CTE для упрощения кода, который выглядит следующим образом:

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]

И вывод, когда sproc передает параметр, такой как 'Север', будет следующим:

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 раз и т. Д. Argh!

1 Ответ

1 голос
/ 15 января 2011

Вам нужно изменить способ возврата месяцев.В вашем наборе результатов вы возвращаете trtm. [Date], но с LEFT JOIN к trtm, так что может не существовать.
Если всегда существует, превратить его вINNER JOIN и измените другой LEFT JOIN, чтобы включить ссылку с trtm. [Date] На fbr. [Date].
В противном случае вам понадобится таблица 'months', чтобы вернуть список месяцев, и оставьте соединение с этимtrtm и fbr в поле даты (а также существующие объединения на сайте)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...