我有一些SQL代码包含在SSRS报告中,运行时会拉出一段指定时期(例如一周或一个月)的学生拘留清单,但是我被要求让该报告从……开始自动运行。当前的学校学期至报告生成之日。这可能吗?我们每年有3个学期,并且每年都会更改日期。该报告具有多个订阅,这些订阅将每周运行,并针对特定日间和特定年份的学生进行过滤,因此我们理想情况下需要该报告进行自我更新。
我们的数据库中有一个名为TblSchoolManagementTermDates的表,其中包含每个术语的txtStartDate和txtFinishDate列。
拘留日期存储在detPpl.dDetentionDate列中
我当前使用的完整SQL代码是:
SELECT ppl.txtSchoolID AS SchoolID,
detPpl.TblDisciplineManagerDetentionsPupilsID AS DetentionID,
ppl.txtSurname AS Surname,
ppl.txtForename AS Forename,
ppl.txtPrename AS PreferredName,
ppl.intNCYear AS Year,
ppl.txtAcademicHouse AS House,
schTermDates.intSchoolYear AS AcademicYear,
schTerms.txtName AS TermName,
CAST(schTermDates.intSchoolYear AS CHAR(4)) + '/' +
RIGHT(CAST(schTermDates.intSchoolYear + 1 AS CHAR(4)), 2) AS AcademicYearName,
detPpl.dDetentionDate AS DetentionDate,
detSessions.txtSessionName AS DetentionName,
detPpl.txtOffenceDescription AS OffenceDescription,
LEFT(Staff.Firstname, 1) + '. ' + Staff.Surname AS PutInBy,
detPpl.intPresent AS AttendedDetention
FROM dbo.TblPupilManagementPupils AS ppl
INNER JOIN
dbo.TblDisciplineManagerDetentionsPupils AS detPpl
ON detPpl.txtSchoolID = ppl.txtSchoolID
INNER JOIN
dbo.TblDisciplineManagerDetentionsSessions AS detSessions
ON detPpl.intDetentionSessionID = detSessions.TblDisciplineManagerDetentionsSessionsID
INNER JOIN
dbo.TblStaff AS Staff
ON Staff.User_Code = detPpl.txtSubmittedBy
INNER JOIN
dbo.TblSchoolManagementTermDates AS schTermDates
ON detPpl.dDetentionDate BETWEEN schTermDates.txtStartDate AND schTermDates.txtFinishDate
INNER JOIN
dbo.TblSchoolManagementTermNames AS schTerms
ON schTermDates.intTerm = schTerms.TblSchoolManagementTermNamesID
LEFT OUTER JOIN
dbo.TblDisciplineManagerDetentionsCancellations AS Cancelled
ON Cancelled.intSessionID = detPpl.intDetentionSessionID
AND Cancelled.dDetDate = detPpl.dDetentionDate
WHERE (ppl.txtAcademicHouse = 'Challoner') AND (Cancelled.TblDisciplineManagerDetentionsCancellationsID IS NULL) AND (CAST(detPpl.dDetentionDate AS DATE) >= CAST (GETDATE()-28 AS DATE))
按ppl.txtSurname,ppl.txtForename,detPpl.dDetentionDate排序
答案 0 :(得分:0)
您需要为此代码分配几个参数。
让我们调用参数
@term_start
和
@term_end
在您的where子句中,您只需要删除此部分即可
AND (CAST(detPpl.dDetentionDate AS DATE) >= CAST (GETDATE()-28 AS DATE))
并将其添加到
AND (CAST(detPpl.dDetentionDate AS DATE) between @term_start and @term_end
现在根据您的学期日期创建另一个数据集-让我们将数据集称为term_dates
类似的事情(我正在填写这些字段,因为我不知道哪些列可用或没有示例数据)使用下面的想法来适应您的需求
select
min(term_start_date) as start_date
,max(term_end_date) as end_date
from TblSchoolManagementTermNames
where convert(date,getdate()) between term_start_date and term_end_date
现在您的报告应具有2个参数。您只需要设置参数的默认值即可。
在term_dates数据集中将@term_start的默认值设置为start_date,将@term_end的默认值设置为end_date
运行报告。您应该在两个学期之间获得数据。
这应该有效..除非我误解了要求