当前位置: 代码迷 >> Sql Server >> 新人求SQL语句解决方案
  详细解决方案

新人求SQL语句解决方案

热度:86   发布时间:2016-04-24 09:09:49.0
新人求SQL语句
有表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
  相关解决方案