tblWeeks表有列weeknum和日期(仅限每周四) 像这样:
WeekNum Date
1496 2015-7-2
1497 2015-7-9
1498 2015-7-16
fnBenchmarkData函数将根据指定的weeknum参数返回每周数据。
我使用交叉应用来显示所有周的基准数据:
SELECT p.weeknum, p.date, q.Key, q.ID, q.Score
FROM tblWeeks AS p
cross apply
fnBenchmarkData(p.weeknum) as q
现在我的问题是,从函数和weeknum生成的分数数据将在每个星期四更新并保持不变直到下周三,即星期四 - 下周三是"循环"并且所有得分数据都相同,周长也相同。但是,该功能仅在周四返回。
交叉申请只显示每周四的数据,我想显示工作日的其余部分,基本上复制行但更改日期。
例如,以下是我从交叉申请中获得的内容:
WeekNum Date Score
1496 2015-7-2 (Thur) 1
1497 2015-7-9 (Thur) 5
1498 2015-7-16(Thur) 7
....
我希望我的交叉应用SQL返回类似这样的内容:
WeekNum Date Score
1496 2015-7-2 (Thur) 1
1496 2015-7-3 1
/* No data stored for weekend
1496 2015-7-6 1
1496 2015-7-7 1
1496 2015-7-8 1
1497 2015-7-9 (Thur) 5
1497 2015-7-10 5
1497 2015-7-13 5
1497 2015-7-14 5
1497 2015-7-15 5
1498 2015-7-16(Thur) 7
任何有想法如何做的人?非常感谢!
答案 0 :(得分:0)
我认为最简单的方法是使用cross join
引入额外的行
SELECT p.weeknum, dateadd(day, n.n, p.date) as date, q.Key, q.ID, q.Score
FROM tblWeeks p cross apply
fnBenchmarkData(p.weeknum) q cross join
(select 0 as n union all select 1 as n union all select 2 union all select 3 union all
select 4 union all select 5 union all select 6
) n;
答案 1 :(得分:0)
您可以尝试使用以下SQL脚本,尝试根据需要与需求... plz更新脚本相关联
CREATE FUNCTION fnBenchmarkData(@WeekNum INT,@BDate DATETIME,@Score INT)
RETURNS @RtnValue TABLE
(
WeekNum INT,
BDate DATETIME,
Score DATETIME
)
AS
BEGIN
-- NO DATA For Weekend
IF(DatePart(WEEKDAY,@BDate) <> 1 AND DatePart(WEEKDAY,@BDate) <> 7)
BEGIN
INSERT INTO @RtnValue VALUES(@WeekNum,@BDate,@Score)
-- Repeat For Thursday
IF(DatePart(WEEKDAY,@BDate)) =5 --Thu repeat row
BEGIN
INSERT INTO @RtnValue VALUES(@WeekNum,@BDate,@Score)
END
END
RETURN
END
GO
使用脚本
评估函数输出Select * From dbo.fnBenchmarkData(1496,'2015-07-09',1)
Select * From dbo.fnBenchmarkData(1496,'2015-07-08',1)
Select * From dbo.fnBenchmarkData(1496,'2015-07-11',1)
现在,正如您在查询中建议的那样,使用交叉应用并传递期望参数并在select命令中使用函数输出。