关于sql server连续计算问题

企业微信截图_15839175562760.png如图所示,左边是计算前的数据,右边是计算后得来的数据,计算规则主要是相同Id值,相邻月份value连续相减,得到右边的数据,这个怎么写在sql server里写计算公式

lxy2 发布于 2020-3-11 17:10 (编辑于 2020-3-11 17:10)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
1
390507794Lv5见习互助
发布于2020-3-12 09:33(编辑于 2020-3-12 09:39)

ID=1的多加了一行数据,验证通过,你第3行的应该计算错了,不是-0.6

image.png

with TB1 AS(SELECT 1 AS ID,0.5 AS VALUE,'2020-01-01' AS TIME

UNION ALL

SELECT 1,0.7,'2020-02-01'

UNION ALL

SELECT 1,0.8,'2020-03-01'

UNION ALL

SELECT 1,1,'2020-04-01'

UNION ALL

SELECT 2,1,'2020-01-01'

UNION ALL

SELECT 2,0.4,'2020-02-01'

UNION ALL

SELECT 2,2,'2020-03-01'

UNION ALL

SELECT 3,0.6,'2020-01-01'

UNION ALL

SELECT 3,0.8,'2020-02-01'

UNION ALL

SELECT 3,0.3,'2020-03-01'

),

TB2 AS(

SELECT *,ROW_NUMBER() OVER(partition by ID order by TIME) AS iRow FROM TB1

)


SELECT S.ID,S.VALUE,S.TIME,SUM(VALUE2) FROM 

(

SELECT A.*,CASE WHEN (A.iRow-B.iRow)%2=0 THEN B.VALUE ELSE -B.VALUE END AS VALUE2  FROM TB2 A

LEFT JOIN TB2 B ON A.ID =B.ID AND B.iRow<=A.iRow

)S

GROUP BY S.ID,S.VALUE,S.TIME

ORDER BY ID,TIME


  • lxy2 lxy2(提问者) 谢谢大哥!!!
    2020-03-12 09:49 
  • lxy2 lxy2(提问者) 是的,脑子有点晕,是我计算错了,谢谢大哥!
    2020-03-12 10:05 
  • lxy2 lxy2(提问者) 大哥,你能给我解释一下case when那一段是啥意思不
    2020-03-12 10:45 
  • 390507794 390507794 回复 lxy2(提问者) 不好意思 最近没看 以第3行为例,第3行的结果是0.8-0.7+0.5=0.6,就是减去N-1行,加上N-2行,减去N-3行,加上N-4行
    2020-04-24 10:13 
最佳回答
0
supercrskyLv3见习互助
发布于2020-3-12 07:56
with c1 as(
select *,row_number()over(order by D)rn from tb a where not exists(select from tb where b=a.b and c=a.c and e=a.e and d<a.d)  --去掉B,C,E都相同的行
)
select a.A,a.B,b.B B1,a.C,b.C D,a.D E,b.D E1,b.E-a.E F
from c1 a inner join c1 b on a.rn=b.rn-1


  • lxy2 lxy2(提问者) 我是只用左边的数据进行计算噢
    2020-03-12 09:14 
  • 4关注人数
  • 564浏览人数
  • 最后回答于:2020-3-12 09:39
    请选择关闭问题的原因
    确定 取消
    返回顶部