SQL Server实现Rate列累计求和并插入Table B的查询求助
SQL Server 累计求和并插入新表的查询语句
源表(Table A)结构与数据
| Date | Tenor | CCY | Rate |
|---|---|---|---|
| 17-Jun-2023 | 3 Month | USD | 500 |
| 17-Jun-2023 | 4 Month | USD | 300 |
| 17-Jun-2023 | 5 Month | USD | 700 |
| 17-Jun-2023 | 6 Month | USD | 400 |
目标表(Table B)预期结果
| Date | Tenor | CCY | Rate |
|---|---|---|---|
| 17-Jun-2023 | 3 | USD | 500 |
| 17-Jun-2023 | 4 | USD | 800 |
| 17-Jun-2023 | 5 | USD | 1000 |
| 17-Jun-2023 | 6 | USD | 1100 |
适用于SQL Server的查询语句
1. 若Table B已存在,直接插入数据
INSERT INTO TableB (Date, Tenor, CCY, Rate) SELECT Date, -- 提取Tenor字段中的数字部分 LEFT(Tenor, CHARINDEX(' ', Tenor) - 1) AS Tenor, CCY, -- 按Tenor数字排序,计算累计求和 SUM(Rate) OVER (ORDER BY CAST(LEFT(Tenor, CHARINDEX(' ', Tenor) - 1) AS INT)) AS Rate FROM TableA;
2. 若Table B未创建,先建表再插入
-- 创建Table B CREATE TABLE TableB ( Date DATE, Tenor VARCHAR(10), CCY VARCHAR(3), Rate INT ); -- 插入处理后的数据 INSERT INTO TableB (Date, Tenor, CCY, Rate) SELECT Date, LEFT(Tenor, CHARINDEX(' ', Tenor) - 1) AS Tenor, CCY, SUM(Rate) OVER (ORDER BY CAST(LEFT(Tenor, CHARINDEX(' ', Tenor) - 1) AS INT)) AS Rate FROM TableA;
关键逻辑说明
- 提取Tenor数字:通过
LEFT和CHARINDEX函数截取Tenor字段中空格前的数字文本,匹配目标表的Tenor格式。 - 累计求和:使用
SUM() OVER(ORDER BY ...)窗口函数,按Tenor的数字大小排序,实现从第一行到当前行的Rate累计求和。
内容的提问来源于stack exchange,提问作者Mugiwara
相关产品推荐
相关产品推荐

