在SQL Server中使用不同日期复制数据
问题描述:
我有一个包含4列和8000行数据的表,其中
datetime
列为2016-01-05。我想将这8000行数据复制到1月1日至31日的所有日子。在SQL Server中使用不同日期复制数据
意思是,即使数据相同,我也应该有8000 * 31天的数据。
如何在不使用Excel文档的情况下执行此操作。
答
首先,在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
答
通过创建一个快捷日期序列和交叉连接你的表,它可以更新您的表,但是你需要:
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;
你会用交叉连接来做到这一点。我会使用一个计数表来用于交叉连接。选择* from YourTable交叉连接TallyTable其中TallyTable.Number
谢谢您,先生,我可以提供更多的细节。我添加了示例数据的屏幕截图,请看看。我有我的表中的前3列和最后一列DT。 SERV_LOC_NUM是我在2016年6月1日的8000条记录。因此,现在我需要复制2016-06-02,2016-06-03的前3列数据等,我如何创建增量日期列并复制这些记录。 – user1960217
我会保持周围的理货。它可以做很多事情,并会使你的代码更快。 http://www.sqlservercentral.com/articles/T-SQL/62867/ –