SQL中每一行的数据和上一行的数据进行计算
来源:互联网 发布:网站访问量统计js插件 编辑:程序博客网 时间:2024/05/18 01:41
在做一些对比的报表查询是有些情况下需要计算出这个报表中的每一行数据的对比,
比如每周的小计和上周对比,
这个时候就需要对读取每一行的数据进行计算,如果在程序中读取数据然后使用程序脚本进行计算的话是很容易的,
但是如果是必须使用纯SQL语句写的话,大多数人都会想到使用游标,
可是游标的效率却又让人不敢恭维,
这个时候可以这样写
有表A
数据如下
a1 a2
1 2
1 3
1 4
如果需要拿第一行和第二行对比,第三和第二行对比,
可以使用row_number()添加两个临时表如
select ROW_NUMBER() over(order by a1) as id,* into #tmp1 from A
select (ROW_NUMBER() over(order by a1)+1) as id,* into #tmp2 from A
注意 其中第二个临时表的ID是加1的 ROW_NUMBER() over(order by a1)+1
结果就有两个临时表,则数据是
#tmp1
ID a1 a2
1 1 2
2 1 3
3 1 4
#tmp2
ID a1 a2
2 1 2
3 1 3
4 1 4
这个时候如果是用左连接 就可以实现对比了
语法如
select a.a1/b.a2 as a1, a.a2 / b.a2 as a2 into #tmp3
from #tmp1 as a left join #tmp2 as b on a.id = b.id
这样子就能实现每一行的数据的对比
这个方法的思路其实就是使用row_number 将每一行数据进行一个错开,
然后使用左连接对应起来获取到对应的行而进行计算.
- SQL中每一行的数据和上一行的数据进行计算
- sql server中将一列多行的数据转成一列一行,和一行数据解析成一行多列
- c++实现对每一行输入的数据的运算
- 查出的表格数据,每一行的特殊处理
- 给每一行数据更新一个不同的随机数
- PB在计算列中获取上一行数据
- 获取DataTabl的第一行和最后一行的数据
- SQL 2005中实现循环每一行做的操作
- 数据一行变多行的SQL查询
- SqlServer FOR XML PATH 将查询的每一行数据添加到一个字段中
- DataTable获取第一行和最后一行的数据
- 有一个文件 test.txt ,读取文件每一行计算每一行的和,最终将结果保存到result.txt文件中
- JSF中DataTable和SelectOneRadio搭配,每条记录每一行一个radio进行单选的解决办法
- 读取MYSQL数据库中某个表的第一行和最后一行数据
- C#中怎么查询dataset中的数据,取其一行数据的每列到textbox中
- angular中删除表格数据的一行
- ROW_NUMBER()函数可以计算每一行数据在结果集中的行号(从1开始计数)
- 同一张表内、利用变化的上一行数据动态地修改下一行数据(示例Demo)
- Looper.loop() android线程中的消息循环
- LDA-math-MCMC 和 Gibbs Sampling
- linux之sed用法
- 安装imagick模块报错:configure: WARNING: You will need re2c 0.13.4解决办法
- apt-get install安装软件问题(安装包的依赖库版本过高问题)
- SQL中每一行的数据和上一行的数据进行计算
- ASIHTTPRequest类库简介和使用说明
- [运营经验] 关于开启GZIP是否会影响百度收录[实测]
- 求数组中和最大的子序列
- linux下有用的源
- Matlab画图指令小记
- 关于代理 不能忽视的小问题
- tomcat GZIP 压缩参数设置
- IE屏蔽右键