Пустой столбец результатов из хранимой процедуры - PullRequest
1 голос
/ 10 июня 2011

В рамках моей хранимой процедуры я проверяю открытые случаи в диапазоне дат, а также открытые случаи, основываясь только на начальной дате и до начальной даты.Я пытался добавить все выборки в одну хранимую процедуру, но когда я выполняю код - для открытых случаев на дату начала все возвращаемые результаты равны нулю.Вот моя полная хранимая процедура, и оператор выбора AS OpenBeginCases - то, где я сталкиваюсь с проблемой.

 SELECT
       C.CaseNumber,
       O.OfficeName,
       CT.Description AS CaseType,
       DATEADD(dd, 0, DATEDIFF(dd, 0, C.DateOpened)) AS DateOpened,
       CR.Description AS Court,
       CaseOfficeAppointment.OpenCases,
       CaseOfficeAppointment.CloseCases,
       CaseOfficeAppointment.OpenBeginCases
FROM 
(
       SELECT  C.CaseId, O.OfficeId, CRT.CourtId,
        (
                   SELECT COUNT(DISTINCT CD.CaseId)
                   FROM [Case] CD
                    INNER JOIN CaseOffice COD ON CD.CaseId = COD.CaseId
                    --INNER JOIN Court CR ON CD.CourtId = CR.CourtId
                    INNER JOIN Office OD ON COD.OfficeId = OD.OfficeId
                    LEFT OUTER JOIN CaseStatusChange CSC ON CD.CaseId = CSC.CaseId
                   --WHERE CR.CourtId = CRT.CourtId
                   WHERE OD.OfficeId = O.OfficeId
                   AND
                   ( CD.DateOpened BETWEEN @BeginDate AND @EndDate 
                        OR
                     CSC.DateReopened BETWEEN @BeginDate AND @EndDate
                    ) 
        )AS OpenCases,
        (
                   SELECT COUNT(DISTINCT CD.CaseId)
                   FROM [Case] CD
                    INNER JOIN CaseOffice COD ON CD.CaseId = COD.CaseId
                    --INNER JOIN Court CR ON CD.CourtId = CR.CourtId
                    INNER JOIN Office OD ON COD.OfficeId = OD.OfficeId
                    LEFT OUTER JOIN CaseStatusChange CSC ON CD.CaseId = CSC.CaseId
                   --WHERE CR.CourtId = CRT.CourtId
                   WHERE OD.OfficeId = O.OfficeId
                   AND
                   ( CSC.DateClosed BETWEEN @BeginDate AND @EndDate 
                    ) 
        )AS CloseCases,
        (
                SELECT   SUM(CaseCount)AS Counts
                FROM    (
                            SELECT  COUNT(C.CaseId) AS CaseCount,O.OfficeId
                            FROM    [Case] C
                                INNER JOIN [Appointment] A ON C.CaseId = A.CaseId
                                INNER JOIN [Office] O ON A.OfficeId = O.OfficeId
                            WHERE   C.DateCreated <= @BeginDate
                                AND C.CaseId NOT IN (SELECT CaseId FROM CaseStatusChange CSC WHERE CSC.DateClosed < @BeginDate)
                            GROUP BY O.OfficeId

                            UNION  

                            -- Also need the cases that reopened and are currently open
                            SELECT  COUNT(ReOpened.CaseId) As CaseCount, ReOpened.OfficeID
                            FROM (

                                    SELECT C.CaseId, MAX(CSC.DateReopened) AS DateReOpened, O.OfficeId 
                                    FROM [Case] C 
                                    INNER JOIN [CaseStatusChange] CSC ON C.CaseId = CSC.CaseId
                                    INNER JOIN [Appointment] A ON C.CaseId = A.CaseId
                                    INNER JOIN [Office] O ON A.OfficeId = O.OfficeId
                                    WHERE CSC.DateReopened <= @BeginDate
                                    GROUP BY C.CaseId, O.OfficeID
                                ) AS ReOpened 
                            WHERE ReOpened.CaseId NOT IN 
                                (
                                    SELECT CaseId FROM CaseStatusChange 
                                    WHERE CaseId = ReOpened.CaseId AND 
                                    CaseStatusChange.DateClosed BETWEEN ReOpened.DateReopened AND @BeginDate
                                )
                                GROUP BY ReOpened.OfficeId
                        ) AS OpenCasesCount
                    GROUP BY OfficeId
                )AS OpenBeginCases

    FROM  [Case] C
        INNER JOIN [Appointment] A ON C.CaseId = A.CaseId
        INNER JOIN [Office] O ON A.OfficeId = O.OfficeId
        INNER JOIN [Court] CRT ON C.CourtId = CRT.CourtId


    WHERE 
           -- Case was open (or reopened) during the date range 
           C.DateOpened BETWEEN @beginDate AND @endDate 
           OR 
           C.CaseId IN (SELECT CaseId FROM CaseStatusChange WHERE DateReopened BETWEEN @beginDate AND @endDate)
           AND 
           -- Office had an appointment sometime during the date range
           A.DateOn < @endDate AND (A.DateOff IS NULL OR A.DateOff BETWEEN @beginDate AND @endDate)

            GROUP BY C.CaseId, O.OfficeId, CRT.CourtId

        )
CaseOfficeAppointment
INNER JOIN [Case] C ON CaseOfficeAppointment.CaseId = C.CaseId
INNER JOIN [Office] O ON CaseOfficeAppointment.OfficeId = O.OfficeId
INNER JOIN [CaseType] CT ON C.CaseTypeId = CT.CaseTypeId
INNER JOIN [Court] CR ON C.CourtId = CR.CourtId

Ответы [ 2 ]

0 голосов
/ 13 июня 2011

Попробуйте очистить ваш сценарий в формате CTE для ясности, возможно, после этого вы получите лучшее представление.

0 голосов
/ 11 июня 2011

хммм ... дикий удар в темноте .... измени свой UNION на UNION ALL?

Нет, это не имеет значения.

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