sql - 增加一列的值
问题描述
我想创建一个 CTE 或从值中减去已知值的东西sum()
。
我该如何解决这个问题,我尝试LAG()
在我的 CTE 上使用,但是当我的值为负时它会出错。
这就是我试图做的:
DROP TABLE IF EXISTS #table;
CREATE table #table (
PR Varchar(50),
Rata int ,
Plafond int
)
insert into #table
select 'PR1',3,10
Union
SELECT 'PR1',4,10
Union
SELECT 'PR1',6,10
Union
SELECT 'PR1',5,10
Union
SELECT 'PR2',5,10
;WITH cte as (
select
PR
,Plafond
,RATA
,ROW_NUMBER() OVER (PARTITION by PR ORDER BY PR) as cont
from #table
)
SELECT
*
, Plafond - SUM (Rata) OVER ( partition by PR,cont order by PR) AS result
FROM cte
这是查询的结果
PR Plafond RATA cont result
PR1 10 3 1 7
PR1 10 4 2 6
PR1 10 5 3 5
PR1 10 6 4 4
PR2 10 5 1 5
这是我对查询逻辑的期望,但这不是我想要的最终结果:
PR Plafond RATA cont Result
PR1 10 3 1 7
PR1 10 4 2 3
PR1 10 5 3 -2
PR1 10 6 4 -8
PR2 10 5 1 5
这就是(最终结果)我期望得到的结果,应用 WHERE 子句或其他东西,当我的“结果”为负时转换“Rata”。“Rata”的新值成为最后一个“Result”和零值之间的差值,在这种情况下“Rata”=5(cont=3)的值变为3。残基“Result”和“Rata”之间的差值使新的“结果”为 0。
PR Plafond RATA cont Result
PR1 10 3 1 7
PR1 10 4 2 3
PR1 10 3 3 0
PR1 10 0 4 0
PR2 10 5 1 5
解决方案
只是猜测...
;WITH cte as (
select
PR
,Plafond
,RATA
,ROW_NUMBER() OVER (PARTITION by PR ORDER BY PR) as cont
from #table
)
SELECT
*
, case when Plafond - SUM (Rata) OVER ( partition by PR order by CONT) < 0 then 0 else Plafond - SUM (Rata) OVER ( partition by PR order by CONT) end AS result
, case
when Plafond - SUM (Rata) OVER ( partition by PR order by CONT) >= 0 then rata
else iif (rata > abs(Plafond - SUM (Rata) OVER ( partition by PR order by CONT)), rata-abs(Plafond - SUM (Rata) OVER ( partition by PR order by CONT)), 0)
--case when rata > abs(Plafond - SUM (Rata) OVER ( partition by PR order by CONT)) then rata-abs(Plafond - SUM (Rata) OVER ( partition by PR order by CONT))
--else 0
--end
end as ratanew
FROM cte;
;WITH cte as (
select
PR
,Plafond
,RATA
,ROW_NUMBER() OVER (PARTITION by PR ORDER BY PR) as cont
from #table
)
SELECT
*
, case when Plafond - SUM (Rata) OVER ( partition by PR order by CONT) < 0 then 0 else Plafond - SUM (Rata) OVER ( partition by PR order by CONT) end AS result
FROM cte;
推荐阅读
- jquery - 如何在 Materialise 自动完成中使用动态数据?
- powershell - 获取用户密码过期日期 Powershell 并导出为 CSV
- python - 在 Azure Cosmos DB 中插入时分区键不起作用
- php - 使用 API 的 Shopify 产品元字段
- jquery - Laravel - JQuery keyup 仅在 Laravel json 中 parent_id 为 1 时有效
- node.js - 错误:此方法仅在ms team team范围内有效
- java - 在检票口的下拉菜单中选择“选择一个”后
- sql - 如何编写 SQL 脚本以在表中插入/更新数据
- javascript - 用 Google 表格上的相应代码 onEdit 替换选定的下拉列表选项
- c++ - 如何为多集和地图使用基于策略的数据结构?