求PL SQL!

ckdmff101429 2011-08-15 10:49:00
现有两个表:
header table :
segment type error_code
1 I YES
2 M YES_M

(注:type的值只有两种:I/M )

line table :

segment qyt price error_msg line_num
1 10 12 YES 1
1 11 13 YES_S 2
1 130 16 YES 3
2 56 1000 NO 1

这两个表通过segment关连,一对多!一个头表可以有多个行!

当header.type='I'时
只要求显示单独一行信息,信息内容包含:header.*,line.qyt,line.price,
当header.type='M'时
显示所有行,header.*,line.*

最好用视图!不考虑用procedure,function 现实!
谢谢!
谢谢!




...全文
64 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
不要悲剧人生 2011-08-16
  • 打赏
  • 举报
回复
两段数据的要求显示的字段都不一致,如果是致,可以考虑用union 和 exists
Rotel-刘志东 2011-08-16
  • 打赏
  • 举报
回复
字符集都不一致无法整合到一起。
007-x 2011-08-16
  • 打赏
  • 举报
回复
更正一下,Type为I时不需要Line中的其他字段,用null 表示:
CREATE OR REPLACE VIEW v_header_line
AS
SELECT h.SEGMENT, h.TYPE, h.ERROR_CODE, l.qyt, l.price, null error_msg,
null line_num
FROM header h, line l
WHERE l.SEGMENT = h.SEGMENT AND h.TYPE = 'I' AND ROWNUM = 1
UNION ALL
SELECT h.SEGMENT, h.TYPE, h.ERROR_CODE, l.qyt, l.price, l.error_msg,
l.line_num
FROM header h, line l
WHERE l.SEGMENT = h.SEGMENT AND h.TYPE = 'Y'
007-x 2011-08-16
  • 打赏
  • 举报
回复
2楼的说法实现: 但使用视图数据字段数必须一致
CREATE OR REPLACE VIEW v_header_line
AS
SELECT h.SEGMENT, h.TYPE, h.ERROR_CODE, l.qyt, l.price, l.error_msg,
l.line_num
FROM header h, line l
WHERE l.SEGMENT = h.SEGMENT AND h.TYPE = 'I' AND ROWNUM = 1
UNION ALL
SELECT h.SEGMENT, h.TYPE, h.ERROR_CODE, l.qyt, l.price, l.error_msg,
l.line_num
FROM header h, line l
WHERE l.SEGMENT = h.SEGMENT AND h.TYPE = 'Y'
xiaobn_cn 2011-08-16
  • 打赏
  • 举报
回复
如果楼主是要做报表的话还是可以整合到一起的,就是把不一致的部分合并成格式化的字符串,这样可以了。
yixilan 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 ckdmff101429 的回复:]
现有两个表:
header table :
segment type error_code
1 I YES
2 M YES_M

(注:type的值只有两种:I/M )
[/Quote]
因为你的字段不一致,只能这样了:
select header.*, 'DUMMY' as segment, line.qyt as qyt,
line.price as price, 'DUMMY' as error_msg,
'DUMMY' as line_num
from header, line
where header.segment = line.segment
and header.type = 'I'
union
select header.*, to_char(line.segment) as segment, line.qyt as qyt,
line.price as price, line.error_msg as error_msg,
to_char(line.line_num) as line_num
from header, line
where header.segment = line.segment
and header.type = 'M'

结果中显示为DUMMY的就是你不想显示的字段喽。。。
Kobayashi 2011-08-16
  • 打赏
  • 举报
回复
楼上说得对。
如果不用楼上的办法。那就还有一个
select header.*,decode(header.type='I',line.qyt||line.price,line.qyt||line.price==) from header,line where line.segment=header.segment
  • 打赏
  • 举报
回复
字段的数量都不一致 如何整合到一起?

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧