首页 > 解决方案 > 如何在 SQL Server 的表中重复值?

问题描述

我在 Microsoft SQL Server 中有一个表,它记录了数据更改触发器的一些值。现在,为了显示一些图表,我想从每列(例如)每 10 分钟获取(或重复)一个值。

如果可能的话,我会尽量避免修改表本身的 INSERT 命令。

原表:

Time Stamp---- | A | B | C |
---------------+---+---+---+
01-01-19 10:20 | 1 | 0 | 0 |
01-01-19 15:30 | 0 | 0 | 1 |
01-01-19 22:50 | 0 | 1 | 0 |
02-01-19 01:40 | 1 | 0 | 0 |
...

我想达到的结果:

Time Stamp---- | A | B | C |
---------------+---+---+---+
01-01-19 10:20 | 1 | 0 | 0 |
01-01-19 10:30 | 1 | 0 | 0 |
01-01-19 10:40 | 1 | 0 | 0 |
01-01-19 10:50 | 1 | 0 | 0 |
... 
01-01-19 15:30 | 0 | 0 | 1 |
01-01-19 15:40 | 0 | 0 | 1 |
01-01-19 15:50 | 0 | 0 | 1 |
01-01-19 16:00 | 0 | 0 | 1 |
...

标签: sqlsql-serverdatabase

解决方案


您可以使用SQL RECURSIONCROSS JOIN

SQL 小提琴

演示

declare @mytable as table(timestamp datetime,A int,B int,C int)

insert into @mytable values
('01-01-19 10:20',1,0,0),('01-01-19 15:30',0,0,1),
('01-01-19 22:50',0,1,0),('01-01-19 01:40',1,0,0)

;with cte as(
select 0 n 
union all
select n+10 from cte where n+10 <40)
select dateadd(mi,n,timestamp)[TIMESTAMP],t1.A,t1.B,T1.C 
from @mytable t1 cross join cte 
order by timestamp

推荐阅读