Join 过去六个月的数据,包括在x轴图形上表示的空行(ReportBuilder)

Join 过去六个月的数据,包括在x轴图形上表示的空行(ReportBuilder),join,report,sql-server-2008-r2,Join,Report,Sql Server 2008 R2,你好 我试图在查询中获取最近六个月的数据,需要在x轴上表示“月-年”标签。因此,当有一个月的数据时,查询可以正常工作,但如果联接失败,并且没有返回该月的数据,则没有标签。因此,我无法在图表(report Builder 3.0)上绘制它,例如 ApptMonthName未完成Appoints任命年份任命MontHint 2012年1月118日2012年1月 2011年12月88 2011 12 查询包括三个表上的联接,然后where子句检查约会是否在所选的月份和年份范围内: declare @S

你好

我试图在查询中获取最近六个月的数据,需要在x轴上表示“月-年”标签。因此,当有一个月的数据时,查询可以正常工作,但如果联接失败,并且没有返回该月的数据,则没有标签。因此,我无法在图表(report Builder 3.0)上绘制它,例如

ApptMonthName未完成Appoints任命年份任命MontHint
2012年1月118日2012年1月
2011年12月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]
SET@SelectedMonth=1
设置@SelectedYear=2012
声明@selectedDate日期时间
声明@PreviousSixMonthDate日期时间
如果(@SelectedMonth=Datepart(mm,GETDate())和@SelectedYear=Datepart(yyyy,GETDate())
开始
SET@selectedDate=CONVERT(datetime,CONVERT(varchar(2),datepart(DD,GETDATE())+“/”+CONVERT(varchar(2),@SelectedMonth)+“/”+CONVERT(varchar(4),@SelectedYear),103))
设置@PreviousSixMonthDate=DATEADD(月-6,@selectedDate)
结束
其他的
开始
设置@selectedDate=CONVERT(日期时间,'31'+'/'+CONVERT(varchar(10),@SelectedMonth)+'/'+CONVERT(varchar(10),@SelectedYear),103)
设置@PreviousSixMonthDate=DATEADD(月-6,@selectedDate)
结束
选择@selectedDate、@previoussixmonthDate
选择dbo.filteradals\u clinicappointment.als\u clinicappointmentid[AppointmentID],
dbo.Filteredals_clinicalappointment.als_statusname[AppointmentStatus],
dbo.Filteredals_ClinicalAppointment.als_appointmentdatetime[AppointmentBookingTime],
Datepart(mm,dbo.Filteredals_ClinicalAppointment.als_appointmentdatetime)[AppointmentMonth],
Datepart(yyyy,dbo.Filteredals\u Clinical Appointment.als\u appointmentdatetime)[AppointmentYear],
DATENAME(月,dbo.Filteredals_ClinicalAppointment.als_appointmentdatetime)[AppointmentMonthName],
DATENAME(年份,dbo.Filteredals_ClinicalAppointment.als_appointmentdatetime)[AppointmentAquame]
从dbo.Filteredals_左外部联接
dbo.Filteredrbs_clinicinstance ON dbo.Filteredals_clinicappointment.als_clinicinstance=dbo.Filteredrbs_clinicinstance.rbs_clinicinstanceid左外联接
dbo.Filteredrbs_clinicinstance.rbs_clinic=dbo.Filteredrbs_clinic.rbs_clinicid左外联接上的dbo.Filteredrbs_clinic
dbo.Filteredrbs\u clinic.rbs\u careprovider=dbo.Filteredrbs\u careproviders.rbs\u careprovidersid上的dbo.Filteredrbs\u careproviders
其中dbo.Filteredrbs\u careproviders.rbs\u careprovidersid=@careprovider
和dbo.Filteredals_clinicalappointment.als_appointmentdatetime=@previoussixmonthsdate
,dbo.Filteredals\u clinicalappointment.als\u appointmentdatetime)=@SelectedYear
按年份(AppointList.AppointBookingTime)、月份(AppointList.AppointBookingTime)分组为[DNAAppts]

任何帮助都将不胜感激。

确保您始终获得报告范围内每个月的数据的一种方法是使用日期集填充临时/派生表,然后将其与数据关联

或者,您可以伪造数据,例如将查询结果(或合理的中间阶段)存储到临时表中,然后检查该表以确保每个预期月都有数据,如果没有,则添加数据

方法3:将查询与一条语句结合起来,该语句为没有实际数据匹配的每个月返回一个值


也许有更多的方法可以做到这一点,但希望这能给你一些灵感

干杯,伙计。我想我会试试第一个。