對表中的數據的某一欄,上下兩條求差,然后全部顯示出來。不用零時表,也不要設變量,直接 select行不行。
解决方案 »
- 多表横表竖查问题
- 关于oracle的一些重要信息的查看
- 数据库连接问题,在线等,给我所有分!!!!!
- 如何将CSV文件导入oracle数据表中?
- sql问题
- 新手的问题:Oracle8i和Oracle9i能装在同一台server上各自互不影响正常运作吗?
- 刚安装好9i,一进入就要输入用户名和口令,到底是些什么?!!!
- 如何"turn on the Tracing"?
- 这个对insert反映的触发器怎么写?我想在触发器里扑获那条insert语句。那条insert语句含有long行的
- 大家看看这个简单的存储过程有什么问题?
- 怎么把oracle一张表中的数据导出为有格式的txt文件?
- 请教关于 透明网关的问题
select b,lag(b,1,0) over() pre_g,b-lag(b,1,0) over() c
from a
select b,lag(b,1,0) over() pre_g,b-lag(b,1,0) over(order by rowid) c
from a
这个是按照默认顺序取的
如果是要按照B 字段排序后取的
select b,lag(b,1,0) over() pre_g,b-lag(b,1,0) over(order by b) c
from a
lag(要取的字段值名,取前N 条,默认值) over(partition by 分组字段1,字段2 order by 排序字段1,字段2)lag(b,1,0) 这里的意思,就是取b字段的值,取前一条纪录,取不到的话,默认就是0
lead是取后一条纪录
select WMSYS.WM_CONCAT(aa.c) c
from(
select b,lag(b,1,0) over() pre_g,b-lag(b,1,0) over(order by rowid) c ,1 no
from a ) aa
where pre_g>0
group by aa.no
WITH a AS
(SELECT 1 b
FROM DUAL
UNION ALL
SELECT 4 b
FROM DUAL
UNION ALL
SELECT 6 b
FROM DUAL
UNION ALL
SELECT 8 b
FROM DUAL
UNION ALL
SELECT 9 b
FROM DUAL)
SELECT wmsys.wm_concat (aa.c) c
FROM (SELECT b, LAG (b, 1, 0) OVER (ORDER BY b) pre_g,
b - LAG (b, 1, 0) OVER (ORDER BY b) c, 1 NO
FROM a) aa
WHERE pre_g > 0
GROUP BY aa.NO结果
c
3,2,2,1
然后在外面写上
pre_g is not null
这样就保证不会过滤掉B为0的情况