在SQL Server中复制具有不同日期的数据

时间:2016-07-25 15:11:06

标签: sql-server datetime sql-server-2012 duplicates

enter image description here我有一个包含4列和8000行数据的表格,其中datetime列为2016-01-05。我想将这8000行数据复制到1月1日到31日的所有日期。

意思是,即使数据相同,我也应该有8000 * 31天的数据。

如何在不使用Excel文档的情况下执行此操作。

2 个答案:

答案 0 :(得分:2)

通过创建快速日期序列并将表格交叉加入,您可以更新表格,但需要:

CREATE TABLE #t (c1 INT, c2 INT, c3 INT, c4 INT);

INSERT  INTO #t
VALUES  (10, 10, 10, 10),
        (20, 20, 20, 20);

;
WITH    CTE_Dates AS (
    SELECT TOP 31
            DATEADD(DAY, ROW_NUMBER() OVER (ORDER BY ao.object_id) - 1, '2016-01-01') AS Date
    FROM      sys.all_objects AS ao
)
SELECT  #t.c1,
        #t.c2,
        #t.c3,
        #t.c4,
        CTE_Dates.Date
FROM    #t
CROSS JOIN CTE_Dates;

答案 1 :(得分:1)

首先,创建一个临时日期表,其中包含2016年1月每天的值。

CREATE TABLE #TEMPDATE (DateCol DATETIME)

DECLARE @DAY INT = 1
DECLARE @DATE DATE = '2016-01-01'
WHILE @DAY <= 31
BEGIN
    INSERT #TEMPDATE
    VALUES (@DATE)
    SET @DAY +=1
    SET @DATE = DATEADD(DD,1,@DATE)
END

接下来,您可以SELECT所需的列和CROSS JOIN正如其他人所说的那样。应该在两个表(8000 x 31行)之间获得笛卡尔积。

SELECT c.Column1, c.Column2, c.Column3, t.DateCol
FROM #TEMPDATE t
CROSS JOIN YourTableName c