主表结构:
REPORTID NUMBER N 报告编号
REPORTNAME VARCHAR2(100) Y 报告名称
REPORTYEAR NUMBER Y 报告年份
UNIT CHAR(1) Y 报告单位(周W、月M、季度Q、年Y、日D、时间段O)
CYCLE1 VARCHAR2(10) Y 周期值1
CYCLE2 VARCHAR2(10) Y 周期值2
REPORTTYPE VARCHAR2(20) Y 报告类别
STATUS CHAR(1) Y '0' 状态(0草稿、1已提交)
CONTENT BLOB Y 报告内容
OPCOMPANY VARCHAR2(20) Y 报告人公司
OPOPERID VARCHAR2(20) Y 报告人操作点ID
OPROLEID VARCHAR2(20) Y 报告人权限ID
OPUSERID VARCHAR2(20) Y 报告人ID
TS DATE Y 报告时间
COMMITTS DATE Y 提交时间
回复表结构:
REPLYID NUMBER N 回复编号
REPORTID NUMBER Y 报告编号
TS DATE Y SYSDATE 回复时间
OPUSERID VARCHAR2(50) Y 回复人
CONTENT BLOB Y 回复内容
OPOPERID VARCHAR2(50) Y 回复人操作点
OPROLEID VARCHAR2(50) Y 回复人角色
OPCOMPANY VARCHAR2(50) Y 回复人公司主表数据:
报告编号 报告名称
31 asfsafasd
42 gdsfgdsfg
36 hsgdfgdfgds
40 tertwetwert
28 年终报告
55 总结
64 fasdfas
4 年终报告回复表数据:
回复编号 报告编号 回复时间 回复人
6 28 2008-10-17 9:17:18 122001001
10 28 2008-10-17 10:11:26 122001001
14 28 2008-10-17 10:29:25 122001001
18 28 2008-10-17 11:01:08 122001001
16 31 2008-10-17 10:51:55 122001001
17 28 2008-10-17 10:58:23 122001001
19 28 2008-10-17 11:02:52 122001001
5 28 2008-10-17 9:16:30 122001001
7 28 2008-10-17 9:18:00 122001001
8 28 2008-10-17 10:05:44 122001001
23 4 2008-10-17 15:09:28 122001001
25 35 2008-10-17 17:07:53 122001001
15 31 2008-10-17 10:50:50 122001001
22 4 2008-10-17 15:09:19 122001001
24 4 2008-10-17 15:09:39 122001001
我想得到的数据:
报告编号 报告名称 回复编号 报告编号 回复时间 回复人
31 asfsafasd 15 31 2008-10-17 10:51:55 122001001
42 gdsfgdsfg 后四个为空
36 hsgdfgdfgds 后四个为空
40 tertwetwert 后四个为空
28 年终报告 19 28 2008-10-17 11:02:52 122001001
55 总结 后四个为空
64 fasdfas 后四个为空
4 年终报告 24 4 2008-10-17 15:09:39 122001001在线等及。。下班前测试通过晚上结贴 是在oracle中的
REPORTID NUMBER N 报告编号
REPORTNAME VARCHAR2(100) Y 报告名称
REPORTYEAR NUMBER Y 报告年份
UNIT CHAR(1) Y 报告单位(周W、月M、季度Q、年Y、日D、时间段O)
CYCLE1 VARCHAR2(10) Y 周期值1
CYCLE2 VARCHAR2(10) Y 周期值2
REPORTTYPE VARCHAR2(20) Y 报告类别
STATUS CHAR(1) Y '0' 状态(0草稿、1已提交)
CONTENT BLOB Y 报告内容
OPCOMPANY VARCHAR2(20) Y 报告人公司
OPOPERID VARCHAR2(20) Y 报告人操作点ID
OPROLEID VARCHAR2(20) Y 报告人权限ID
OPUSERID VARCHAR2(20) Y 报告人ID
TS DATE Y 报告时间
COMMITTS DATE Y 提交时间
回复表结构:
REPLYID NUMBER N 回复编号
REPORTID NUMBER Y 报告编号
TS DATE Y SYSDATE 回复时间
OPUSERID VARCHAR2(50) Y 回复人
CONTENT BLOB Y 回复内容
OPOPERID VARCHAR2(50) Y 回复人操作点
OPROLEID VARCHAR2(50) Y 回复人角色
OPCOMPANY VARCHAR2(50) Y 回复人公司主表数据:
报告编号 报告名称
31 asfsafasd
42 gdsfgdsfg
36 hsgdfgdfgds
40 tertwetwert
28 年终报告
55 总结
64 fasdfas
4 年终报告回复表数据:
回复编号 报告编号 回复时间 回复人
6 28 2008-10-17 9:17:18 122001001
10 28 2008-10-17 10:11:26 122001001
14 28 2008-10-17 10:29:25 122001001
18 28 2008-10-17 11:01:08 122001001
16 31 2008-10-17 10:51:55 122001001
17 28 2008-10-17 10:58:23 122001001
19 28 2008-10-17 11:02:52 122001001
5 28 2008-10-17 9:16:30 122001001
7 28 2008-10-17 9:18:00 122001001
8 28 2008-10-17 10:05:44 122001001
23 4 2008-10-17 15:09:28 122001001
25 35 2008-10-17 17:07:53 122001001
15 31 2008-10-17 10:50:50 122001001
22 4 2008-10-17 15:09:19 122001001
24 4 2008-10-17 15:09:39 122001001
我想得到的数据:
报告编号 报告名称 回复编号 报告编号 回复时间 回复人
31 asfsafasd 15 31 2008-10-17 10:51:55 122001001
42 gdsfgdsfg 后四个为空
36 hsgdfgdfgds 后四个为空
40 tertwetwert 后四个为空
28 年终报告 19 28 2008-10-17 11:02:52 122001001
55 总结 后四个为空
64 fasdfas 后四个为空
4 年终报告 24 4 2008-10-17 15:09:39 122001001在线等及。。下班前测试通过晚上结贴 是在oracle中的
解决方案 »
- 更新表中多条记录多个字段
- 如何select出两个表的内容放在一起?
- oracle产品限制50用户,这限制50用户从技术角度来说是什么意思?
- 请问我设置的的字段类型是number,出现数字溢出是怎么回事,怎么解决?
- DBLINK 和 execute immediate 如何结合的问题,请帮忙,急,在线等~!
- ORACLE 中的二进制类型用什么表示?
- 用Oracle函数实现公式的解析
- 能打开enterprise manager console的用户不能打开sqlplus?
- 错误:ORA-01653表TZZJ.SUORP无法通过128扩展.
- 如何将ORACLE数据库的表记录输出到文本文件(成功后加分100)
- 追加100分
- 在oracle10g的pro*c/c++中从c变为c++时的错误
回复表:b
select * from a,b
where a.报告编号(+) = b.报告编号.
其实你需要的是个左右联接的问题.
FROM M/*主表*/,
(
SELECT *
FROM (
SELECT REPLYID
,REPORTID
,TS
,OPUSERID
,CONTENT
,OPOPERID
,OPROLEID
,OPCOMPANY
,rownumber() over(partition by REPORTID order by ts desc) rn
FROM C/*子表*/
)
WHERE rn = 1
) C
WHERE M.REPORTID = C.REPORTID(+)
select * from a,b
where a.报告编号 = b.报告编号(+).
这句话在oracle中识别不了rownumber() over(partition by REPORTID order by ts desc) rn
from 主表 c
left join (select a.*
from 回复表 a,
(select 报告编号 bgbh, max(回复时间) hfsj
from 回复表
group by 报告编号) b
where a.报告编号 = b.bgbh
and a.回复时间 = b.hfsj)) d on c.报告编号 = d.报告编号
from table1 a
left join (select REPLYID, REPORTID, TS, OPUSERID
from (select REPLYID,
REPORTID,
TS,
OPUSERID,
row_number() over(partition by REPORTID order by ts desc) rn
from table2)
where rn = 1) b on a.REPORTID = b.REPORTID
select a.REPORTID, a.REPORTNAME, b.REPLYID, b.REPORTID, b.TS, b.OPUSERID
from table1 a
left join (select REPLYID, REPORTID, max(TS), OPUSERID
from table2
group by REPORTID) b on a.REPORTID = b.REPORTID
SQL> select * from tblmst; REPORTID REPORTNAME
---------- --------------------------------------------------------------------------------
31 asfsafasd
42 gdsfgdsfg
36 hsgdfgdfgds
40 tertwetwert
28 年终报告
55 总结
64 fasdfas
4 年终报告8 rows selectedSQL> select * from tblsec; REPLYID REPORTID TS OPUSERID
---------- ---------- ----------- --------------------------------------------------
6 28 10/17/08 9: 122001001
10 28 10/17/08 10 122001001
14 28 10/17/08 10 122001001
18 28 10/17/08 11 122001001
16 31 10/17/08 10 122001001
17 28 10/17/08 10 122001001
19 28 10/17/08 11 122001001
5 28 10/17/08 9: 122001001
7 28 10/17/08 9: 122001001
8 28 10/17/08 10 122001001
23 4 10/17/08 15 122001001
25 35 10/17/08 17 122001001
15 31 10/17/08 10 122001001
22 4 10/17/08 15 122001001
24 4 10/17/08 15 12200100115 rows selectedSQL>
SQL> select A.reportid,A.reportname,B.REPLYID,b.TS,b.OPUSERID FROM TBLMST A
2 LEFT OUTER JOIN (
3 select REPLYID,REPORTID,ts,OPUSERID from (
4 select REPLYID,REPORTID,ts,OPUSERID,
5 row_number()over(partition by REPORTID order by ts desc) rn
6 from tblsec
7 ) where rn=1
8 ) B ON A.REPORTID=B.REPORTID; REPORTID REPORTNAME REPLYID TS OPUSERID
---------- -------------------------------------------------------------------------------- ---------- ----------- --------------------------------------------------
4 年终报告 24 10/17/08 15 122001001
28 年终报告 19 10/17/08 11 122001001
31 asfsafasd 16 10/17/08 10 122001001
64 fasdfas
36 hsgdfgdfgds
55 总结
40 tertwetwert
42 gdsfgdsfg 8 rows selectedSQL>
SQL> select A.reportid,A.reportname,B.REPLYID,b.TS,b.OPUSERID FROM TBLMST A
2 LEFT OUTER JOIN (
3 select REPLYID,REPORTID,ts,OPUSERID from (
4 select REPLYID,REPORTID,ts,OPUSERID,
5 row_number()over(partition by REPORTID order by ts) rn
6 from tblsec
7 ) where rn=1
8 ) B ON A.REPORTID=B.REPORTID; REPORTID REPORTNAME REPLYID TS OPUSERID
---------- -------------------------------------------------------------------------------- ---------- ----------- --------------------------------------------------
4 年终报告 22 10/17/08 15 122001001
28 年终报告 5 10/17/08 9: 122001001
31 asfsafasd 15 10/17/08 10 122001001
64 fasdfas
36 hsgdfgdfgds
55 总结
40 tertwetwert
42 gdsfgdsfg 8 rows selectedSQL>
row_number() over这个我能识别,rownumber() 这个是不认识,后来改好了。
各位能解释一下这句话嘛?:row_number()over(partition by REPORTID order by ts) rn
网上搜索有点模糊,请各位指教