有表A:
PL RQ ID A1 A2 A3
Z11 02-01 01 H01 10 5
Z15 02-02 01 H01 0 5
Z19 02-03 01 H01 30 5
想用语句查询,得到以下效果,如何搞
查询结果:
RQ ID A1 A2 A3 B1
02-01 01 H01 10 5 5
02-02 01 H01 0 5 0
02-03 01 H01 30 5 25
就是说B1列值为A2-A3,如此累积算法。我用sum.. over order by..估计写法不对,求值都是每行的A2-A3,累加不到多行上。
代码1:
select PL,RQ,ID,A1,A2,A3,(select sum(A2-A3) from A where ID=a.ID and PL<=a.PL) as B1
from A a where id='01' and A1='H01'
此语句不加【and A1='H01'】这个条件的时候算出来的是累计算法,但是加上后就不行了。结果如下所示:
RQ ID A1 A2 A3 B1
02-01 01 H01 10 5 5
02-02 01 H02 20 0 25
02-02 01 H01 0 5 20
02-03 01 H01 30 5 45 ----------不加【and A1='H01'】这个条件执行结果
RQ ID A1 A2 A3 B1
02-01 01 H01 10 5 5
02-02 01 H01 0 5 20
02-03 01 H01 30 5 45 ----------加上【and A1='H01'】这个条件执行结果
代码2:
select PL,RQ,ID,A1,A2,A3, sum(A2-A3) over(order by PL) from A where id='01' and A1='H01'
执行报错:order 附近有语法错误
select PL,RQ,ID,A1,A2,A3, sum(A2-A3) over(order by PL) from A where id='01' and A1='H01'
执行:查询结果是单行A2-A3
------解决思路----------------------
我想你真实数据和你顶楼的数据差别较大,尝试一下
;WITH CTE AS(
SELECT * FROM SPLSK
WHERE SPID='01'AND HW='H01'--替换成你的条件
)
SELECT T1.RQ,T1.SPID,T1.HW,T1.RKSHL,T1.CHKSHL,SUM(T2.RKSHL-T2.CHKSHL)B1
FROM CTE T1
JOIN CTE T2 ON T1.SPID=T2.SPID AND T1.plh>=T2.plh
GROUP BY T1.RQ,T1.SPID,T1.HW,T1.RKSHL,T1.CHKSHL,T1.plh
ORDER BY T1.plh