sql - 将数据从表中的行复制到同一表中的未来行
问题描述
我有一个以日期为主键的 Temp 表 - 每天一行,大约 2 年的行。我想将 2017 年 8 月 1 日的 CY 实际交易量复制到 2017 年 9 月 1 日,依此类推(尽管我希望能够运行此 SQL 来复制其他数据也)。
所以 2017 年 9 月 1 日应该有 200 个,以此类推整个月。
Date, Pipeline, CY Actual Volume
8/1/2017, XX, 200
8/2/2017, YY, 100
.....
9/1/2017, XX, 0
9/2/2017, YY, 0
.
.
我有以下 SQL,但它不起作用(它确实运行成功并给了我受影响的行数,但没有任何变化)。
update cy
set cy.[CY Actual Volume] = ny.[CY Actual Volume]
from [dbo].[Temp] cy
left join [dbo].[Temp] ny on dateadd(day, 31, cy.Date) = ny.Date
and cy.[Pipeline] = ny.[Pipeline]
where cy.[CY Actual Volume] = 0
and year(ny.Date) = 2017
解决方案
CREATE TABLE Volume
(
Date date not null primary key,
Pipeline nvarchar(50) not null,
CY int not null
)
go
--delete Volume;
insert into Volume
(Date, Pipeline, CY)
VALUES
('2017-08-01', 'XX', 200),
('2017-08-02', 'YY', 100),
('2017-09-01', 'XX', 0),
('2017-09-02', 'YY', 0);
update v1
set
v1.CY = v2.CY
output inserted.Date, inserted.Pipeline, deleted.CY as OldCY, inserted.CY as NewCY
from
Volume as v1 inner join Volume as v2
on (DATEADD(MONTH, -1, v1.Date) = v2.Date and MONTH(v2.Date) = 8 and YEAR(v2.Date) = 2017)
推荐阅读
- .net - 添加到域的 Azure 上托管的服务器上的 Windows 身份验证
- python - 如何使用 pygame 制作自定义最小化、最大化和关闭按钮?
- xamarin - Nunit Assert 不包含 DoesNotThrow 的定义
- java - 将输出和错误消息打印到控制台
- reactjs - 处理规范化数据以在页面中显示 - redux
- java - java.lang.UnsatisfiedLinkError: dlopen failed: "xxxx/libnative-lib.so" 有糟糕的 ELF 魔法
- python - 为什么我的 pandas DataFrame 列也是 Dataframes,而不是 Series?
- autodesk-forge - 使用 Forge 从 BIM 360 访问更改报告
- node.js - npm 错误!请求的依赖类型无效:别名
- c# - 有没有办法在不统一使用 Update() 函数的情况下从按钮单击开始方法