我有一个包含开始日期,结束日期和期限代码的数据集。用户将进入一个学年。学年将用于确定该年的三个学期代码。我想使用这三个代码来选择每个术语的开始和结束日期,这将进入主查询。我可以通过设置三个数据集来实现这一点,这三个数据集将保存每个术语的术语代码,开始日期和结束日期,并从那里填充开始和结束日期参数,但我想知道的是,是否有更动态的方式实现这一目标。
谢谢!
一些澄清。我想要一种方法来填充一个数据集中的所有六个参数,而不是每个开始日期和结束日期都有自己的数据集。
答案 0 :(得分:1)
我无法确定您的数据是如何设置的,因此我将在此进行一些猜测。您可以通过为每个术语旋转开始日期和结束日期来返回六个单独的日期:
declare @TermCodes table(AcademicYear int,TermCode varchar(50))
insert into @TermCodes
values
(2014,'FL14'),
(2014,'SP14'),
(2014,'SM14')
declare @TermDates table(TermCode varchar(50), StartDate date,EndDate date)
insert into @TermDates
values
('FL14','20140915','20141215'),
('SP14','20150115','20150415'),
('SM14','20150515','20150815')
declare @AcademicYear int
set @AcademicYear = 2014
select
min(StartDate1) StartDate1,
min(EndDate1) EndDate1,
min(StartDate2) StartDate2,
min(EndDate2) EndDate2,
min(StartDate3) StartDate3,
min(EndDate3) EndDate3
from (
select
td.StartDate,
td.EndDate,
'StartDate' + cast(row_number() over(order by td.StartDate) as char(1)) StartDates,
'EndDate' + cast(row_number() over(order by td.StartDate) as char(1)) EndDates
from @TermCodes tc
inner join @TermDates td
on td.TermCode = tc.TermCode
where tc.AcademicYear = @AcademicYear
) t
pivot (
max(StartDate)
for StartDates in(StartDate1,StartDate2,StartDate3)
) sd
pivot (
max(EndDate)
for EndDates in(EndDate1,EndDate2,EndDate3)
) ed