小弟新学数据库,平时用得不多.现有一个"高难度的问题"请教各位大虾.
提供分数不多,但只要解决,决不食言!
需要的是有能之士前来挑战.
如有情况不明者可留言索要,再次感谢,下面开始吧.问题:我有一进货表,存贮进货日期,来货单位,来货品种,数量,单价等信息
现要把每次新进货的品种,与上一次的进行价格对比.(同品种)表中有进货细单,所以可以据max(进货细单)查找到最近一次进价.但还不行.
/*最后一次进货单价,按最大进货总单SUDOCDTLID为依据*/
/*
SELECT 项目1,项目2,项目3,项目4,项目5,项目6
FROM 表1
WHERE 进货细单 IN (SELECT SUDTLID
FROM (SELECT 货品,MAX(进货细单) SUDTLID
FROM 表1 GROUP BY 货品) A);
*/在网上学习了一天,使用下面的语句,只能查找所有表中的最后二条,结果不是我所要的(每个货品最新的二条).
select rownum,a.货品,a.进货细单
from 表1 a
where rownum <=2
group by a.货品,a.进货细单,rownum
order by a.进货细单,a.货品 desc;同时要查找出每个货品的,最后2条记录.并用列转换成行.如:
货品 价格
A 12.0
A 12.5
B 10.0
C 11.0
B 10.5
C 11.5
转换成:
货品 价格1 价格2
A 12.0 12.5
B 10.0 10.5
C 11.0 11.5参考高手的资料,在此提供列转行的方法,请行家鉴定。呵呵实现功能
创建视图时移动行值为列值表ttt有三个字段
seq --序列
jcxm --检查项目
zhi --值数据分别如下:
seq jcxm zhi
------- -------- --------
11 1 0.50
11 2 0.21
11 3 0.25
12 1 0.24
12 2 0.30
12 3 0.22
create view v_view1
as
select seq,
sum(decode(jcxm,1, zhi)) 检测项目1,
sum(decode(jcxm,2, zhi)) 检测项目2,
sum(decode(jcxm,3, zhi)) 检测项目3
from ttt
group by seq;序号 检测项目1 检测项目2 检测项目3
11 0.50 0.21 0.25
12 0.24 0.30 0.22我查询过“提取最后二条记录”,“Oracle 列转行”等。
SELECT * FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY 货品 ORDER BY 进货日期 DESC) RNUM ,T.*
FROM TBNAME T) TT WHERE TT.RNUM<=2;
rank/dense_rank