Данные за последние шесть месяцев, включая пустые строки для представления на графике оси X (ReportBuilder) - PullRequest
0 голосов
/ 24 февраля 2012

Привет,

Я пытаюсь получить данные за последние шесть месяцев в моем запросе, и мне нужно представить метку «Месяц-год» на оси X. Таким образом, запрос работает нормально, если есть данные за месяц, но если он не работает в соединении и данные за этот месяц не возвращаются - метка отсутствует. Поэтому я не могу нарисовать ее на диаграмме (построитель отчетов 3.0) Например,

ApptMonthYearname NotCompleteAppointments НазначениеYear НазначениеMonthInt
Январь-2012 118 2012 1
Декабрь-2011 88 2011 12

Запрос включает соединение трех таблиц, а затем условие where проверяет, находится ли встреча между выбранным диапазоном месяца и года или нет:

declare @SelectedMonth int  
declare @SelectedYear int  
declare @careprovider varchar(20)  
DECLARE @intFlag INT  

скажем

SET @SelectedMonth = 1  
SET @SelectedYear =2012  

declare @selectedDate datetime  
declare @previoussixmonthsdate datetime  

IF (@SelectedMonth = Datepart(mm,GETDate()) and @SelectedYear =Datepart(yyyy,GETDate()))  

BEGIN  
SET @selectedDate = CONVERT(datetime, CONVERT(varchar(2), datepart(DD,GETDATE())+ '/' + Convert(varchar(2),@SelectedMonth) + '/' +Convert(varchar(4),@SelectedYear), 103))  
SET @previoussixmonthsdate= DATEADD(month, -6, @selectedDate)  

END  

ELSE  

BEGIN  

SET @selectedDate = CONVERT(datetime, '31'+ '/' + Convert(varchar(10),@SelectedMonth) + '/' +Convert(varchar(10),@SelectedYear), 103)  
SET @previoussixmonthsdate= DATEADD(month, -6, @selectedDate)  

END  


select @selectedDate, @previoussixmonthsdate  



SELECT     dbo.Filteredals_clinicappointment.als_clinicappointmentid [AppointmentID], 
        dbo.Filteredals_clinicappointment.als_statusname [AppointmentStatus], 
        dbo.Filteredals_clinicappointment.als_appointmentdatetime [AppointmentBookingTime],
         Datepart(mm,dbo.Filteredals_clinicappointment.als_appointmentdatetime) [AppointmentMonth],
         Datepart(yyyy,dbo.Filteredals_clinicappointment.als_appointmentdatetime) [AppointmentYear],
         DATENAME(month,dbo.Filteredals_clinicappointment.als_appointmentdatetime) [AppointmentMonthName],
         DATENAME (year,dbo.Filteredals_clinicappointment.als_appointmentdatetime) [AppointmentyearName]


FROM         dbo.Filteredals_clinicappointment LEFT OUTER JOIN
                  dbo.Filteredrbs_clinicinstance ON dbo.Filteredals_clinicappointment.als_clinicinstance = dbo.Filteredrbs_clinicinstance.rbs_clinicinstanceid  LEFT OUTER JOIN
                  dbo.Filteredrbs_clinic ON dbo.Filteredrbs_clinicinstance.rbs_clinic = dbo.Filteredrbs_clinic.rbs_clinicid      LEFT OUTER JOIN
                  dbo.Filteredrbs_careproviders ON dbo.Filteredrbs_clinic.rbs_careprovider = dbo.Filteredrbs_careproviders.rbs_careprovidersid

                  WHERE dbo.Filteredrbs_careproviders.rbs_careprovidersid= @careprovider
                  AND dbo.Filteredals_clinicappointment.als_appointmentdatetime <= @selectedDate AND

                   dbo.Filteredals_clinicappointment.als_appointmentdatetime >=@previoussixmonthsdate

                ,dbo.Filteredals_clinicappointment.als_appointmentdatetime)= @SelectedYear

                  GROUP BY YEAR(AppointmentList.AppointmentBookingTime), MONTH(AppointmentList.AppointmentBookingTime)) as [DNAAppts]

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 24 февраля 2012

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

В качестве альтернативы вы можете подделать данные, например, сохранив результаты вашего запроса (или разумного промежуточного этапа) во временной таблице, затем осмотрите эту таблицу, чтобы убедиться, что есть данные за ожидаемый месяц, а если нет, то добавьте их.

Подход 3: объедините ваш запрос с оператором, который возвращает значение для каждого ожидаемого месяца, когда нет реальных данных для сопоставления

Возможно, есть даже больше способов сделать это, но, надеюсь, что этопредложить вам вдохновение

...