SQL-如何复制行,但只更改一列信息?

SQL-如何复制行,但只更改一列信息?,sql,sql-server,database,tsql,cross-apply,Sql,Sql Server,Database,Tsql,Cross Apply,tblWeeks表有weeknum和date列(仅限每周四) 像这样: WeekNum Date 1496 2015-7-2 1497 2015-7-9 1498 2015-7-16 FNBecherkData函数将根据指定的weeknum参数返回每周数据 我使用交叉应用来显示所有周的基准数据: SELECT p.weeknum, p.date, q.Key, q.ID, q.Score FROM tblWeeks AS p cross

tblWeeks表有weeknum和date列(仅限每周四) 像这样:

WeekNum    Date
1496       2015-7-2
1497       2015-7-9
1498       2015-7-16
FNBecherkData函数将根据指定的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也相同。但是,该功能将仅在周四返回。

交叉应用将只显示每周四的数据,我想显示其余的工作日,基本上复制行,但更改日期

例如,以下是我从cross apply获得的信息:

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  

有人知道怎么做吗?非常感谢

我认为最简单的方法是使用
交叉连接
引入额外的行

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;

我认为最简单的方法是使用
交叉连接
引入额外的行

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;

您可以尝试使用下面的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命令中使用交叉应用和传递预期参数并使用函数输出。

您可以尝试使用下面的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命令中使用交叉应用和传递预期参数并使用函数输出。

而不是使用交叉连接(值(0)、(1)、(2)、(3)、(4)、(5)、(6)、(7))n(n)@Shnugo但这至少需要
SQL Server 2008
不是吗?您可以使用
交叉连接(值(0)、(1)、(2)、(3)、(4)、(5)、(6)、(7))n(n)
@Shnugo但这至少需要
SQLServer2008
,不是吗?