集思广益

lsrzm 2003-07-13 03:44:59
本人现在在pl/sql下写html报表,对象是一个非常大的集团企业的海量数据,要从中检索、计算符合条件的数据,因为用到的字段的个数都是上百的,用到的视图,也是在别的视图上形成的(不知道多少级了),请大家讨论在做这样的分析查询时应该注意什么问题,怎样做视图才能做到最优,游标嵌套是不是非常耗内存,还有呀请大家详细说明一下group by的应用。
再问:
本人写这个视图的愿意是得到由每个调拨单号 和产品id确定的一个调拨单上的每样产品的定购数量(可能同一样产品订购了多次),不知这样写正确吗,能否得到优化,如果不正确能否解释一下他的意思:
create or replace view vv_om110_delivery_v as
select
de.delivery_id, --调拨单号
wdd.inventory_item_id, --产品id
sum(wdd.requested_quantity) quantity, --定购数量
ic.segment3 --产品类别
from
wsh_new_deliveries de ,
wsh_delivery_details wdd,
wsh_delivery_assignments wda,
(
Select Distinct
organization_id,
inventory_item_id,
segment1 segment3
From mtl_item_categories_v
) ic

where
wdd.delivery_detail_id = wda.delivery_detail_id
and wda.delivery_id = de.delivery_id
and ic.organization_id = wdd.organization_id
and ic.inventory_item_id = wdd.inventory_item_id

group by de.delivery_id,wdd.inventory_item_id,ic.segment3
order by de.delivery_id
本人刚进入oracle的世界以后相信还会有更多的疑问来麻烦大家,请多多照顾!
...全文
100 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueskyWide 2003-07-13
  • 打赏
  • 举报
回复
"不是说select中的字段都应该在group by中出现马",
应反过来说,group by字段应在select中出现
:)
lsrzm 2003-07-13
  • 打赏
  • 举报
回复
还有没有谈谈别的的
lsrzm 2003-07-13
  • 打赏
  • 举报
回复
不加的话出现错误亚,不是说select中的字段都应该在group by中出现马
BlueskyWide 2003-07-13
  • 打赏
  • 举报
回复
有必要加group by ic.segment1吗?
不是对它分组统计啊。

对于ic的distinct,好象是多余的,因为后面的条件已作判断。
lsrzm 2003-07-13
  • 打赏
  • 举报
回复
还有亚,加不加以下可以吗,为什么呀?
(
Select Distinct
organization_id,
inventory_item_id,
segment1 segment3
From mtl_item_categories_v
) ic

lsrzm 2003-07-13
  • 打赏
  • 举报
回复
还是不正确,ic.segment1没有在group up中出现吧
BlueskyWide 2003-07-13
  • 打赏
  • 举报
回复
如果产品类别主键定义恰当的话,稍改一下(segment3->segment1):
create or replace view vv_om110_delivery_v as
select
de.delivery_id, --调拨单号
wdd.inventory_item_id, --产品id
sum(wdd.requested_quantity) quantity, --定购数量
ic.segment1 --产品类别
from
wsh_new_deliveries de ,
wsh_delivery_details wdd,
wsh_delivery_assignments wda,
mtl_item_categories_v ic
where
wdd.delivery_detail_id = wda.delivery_detail_id
and wda.delivery_id = de.delivery_id
and ic.organization_id = wdd.organization_id
and ic.inventory_item_id = wdd.inventory_item_id

group by de.delivery_id,wdd.inventory_item_id
order by de.delivery_id;
lsrzm 2003-07-13
  • 打赏
  • 举报
回复
谢了,ic.segment3我在查询中还需要,楼上的写的也不正确亚,还有为什么把中间一个select集合给去掉了了呢,我是加了distinct的,里面有好多重复的数据亚
BlueskyWide 2003-07-13
  • 打赏
  • 举报
回复
create or replace view vv_om110_delivery_v as
select
de.delivery_id, --调拨单号
wdd.inventory_item_id, --产品id
sum(wdd.requested_quantity) quantity, --定购数量
ic.segment3 --产品类别
from
wsh_new_deliveries de ,
wsh_delivery_details wdd,
wsh_delivery_assignments wda,
mtl_item_categories_v ic
where
wdd.delivery_detail_id = wda.delivery_detail_id
and wda.delivery_id = de.delivery_id
and ic.organization_id = wdd.organization_id
and ic.inventory_item_id = wdd.inventory_item_id

group by de.delivery_id,wdd.inventory_item_id
order by de.delivery_id;

17,090

社区成员

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

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