我有一个包含4列和8000行数据的表格,其中datetime
列为2016-01-05。我想将这8000行数据复制到1月1日到31日的所有日期。
意思是,即使数据相同,我也应该有8000 * 31天的数据。
如何在不使用Excel文档的情况下执行此操作。
答案 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