日期:2014-05-17  浏览次数:20521 次

SQL计算问题,请达人相助
有如下一个表tb

nian    yue    zhi1     zhi2
2011    10      50      30
2011    11      30      40
2011    12      20       50
2012     1      100      60
2012     2      200      70
2012     3      300      80

需要得到如下的结果:
nian    yue    zhi1     zhi2  jisuanzhi
2011    10      50      30         0    ((50-null)*30)
2011    11      30      40        -800  ((30-50)*40)
2011    12      20       50       -500  ((20-30)*50)
2012     1      100      60       4800    ((100-20)*60)
2012     2      200      70       7000    ((200-100)*70)
2012     3      300      80       8000    ((300-200)*80)

我的计算公式是:最新一个月的zhi1减去上个月的zhi1然后在乘以最新这个月的zhi2,就得到了jisuanzhi这个字段的结果。请达人相助,谢谢!!

 
------最佳解决方案--------------------
select *,zhi1-isnull(
(select zhi1 from tb where 
datepart(yy,dateadd(mm,1,ltrim(nian)+right('00'+ltrim(yue),2)+'01'))=t.nian and 
datepart(mm,dateadd(mm,1,ltrim(nian)+right('00'+ltrim(yue),2)+'01'))=t.yue ),0)*zhi2 as zzz
from tb t
------其他解决方案--------------------
改进一下:

--CREATE TABLE huang(nian  INT,  yue INT,   zhi1 INT   ,  zhi2 int )
 --INSERT INTO huang
 --SELECT 2011,    10 ,     50  ,    30
 --UNION ALL SELECT 2011,    11 ,     30  ,    40
 --UNION ALL SELECT 2011,    12 ,     20  ,     50
 --UNION ALL SELECT 2012,     1 ,     100 ,     60
 --UNION ALL SELECT 2012,     2 ,     200 ,     70
 --UNION ALL SELECT 2012,     3 ,     300 ,     80
 
 --SELECT * FROM Huang