给大家一个难题研究研究[讨论]

zjd950131 2003-08-08 07:18:32
给大家一个难题研究研究[讨论]
现在有三个表
a表
部门代码 部门名称
001 女装
002 男装
.......

b表
商品代码 商品名称 老库存
1 服装1 1
2 服装2 2
3 服装3 3
4 服装4 4

.......
有3000多条记录

c表
商品代码 商品名称 计划进货 部门代码
1 服装1 5 001
2 服装2 6 001
3 服装3 9 001
4 服装4 10 002
......
1 服装1 7 002
2 服装2 8 002
3 服装3 11 002
4 服装4 12 002
.......
每一个部门代码都有3000多条记录

现在要形成表d
商品代码 商品名称 老库存 女装 男装 .... 合计
1 服装1 1 5 7 7
2 服装2 2 6 8 12
3 服装3 3 9 11 17
4 服装4 4 10 12 18
........
有3000多条记录

我用交叉报表形成了,但是速度很慢,要等10多分钟,很不合理,请大家看看
有没有好得实现方法?
...全文
66 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
mgan 2003-08-10
  • 打赏
  • 举报
回复
可以 用视图 解决A
cooltnt 2003-08-10
  • 打赏
  • 举报
回复
用视图
Hanson_bati_zhu 2003-08-10
  • 打赏
  • 举报
回复
to: zjd950131(zjd950131)
你看看这几张表是否有主键,
另外
给部门代码字段s_deptid和d_exedate加上索引

to:superneo(阿伟)
能否把这个大表拆分开?
要不然,最简单的SELECT也得执行很长时间的

yingmu 2003-08-09
  • 打赏
  • 举报
回复
用存储过程
superneo 2003-08-09
  • 打赏
  • 举报
回复
呵呵,小弟刚好也遇到这个问题。
从informix的一个table里检索数据做成交叉表报表。做就容易,很快就搞掂,不过效率的确是个问题。
why?
因为我这个table现在有3000万条记录,每天会增加至少3万条记录,天阿,我都不想活啦!!!

jackxrh() :给个例子吧


jackxrh 2003-08-09
  • 打赏
  • 举报
回复
不要用交叉报表 , 你把 DataWindow 的 SQL 语法加以改变一下就可以了..

用 SP 也不失是一个发的办法 .. 但如果为了简洁 , 就想办法用一个 SQL 语法

查出你所要的数据吧
Thinkinger 2003-08-08
  • 打赏
  • 举报
回复
存储过程中用临时表返回你需要的数据,用这个存储过程过数据源
prain2003 2003-08-08
  • 打赏
  • 举报
回复
建议用存储过程,可以大大加快速度。建立临时表。
qiyousyc 2003-08-08
  • 打赏
  • 举报
回复
只用“select c表,利用group by 商品代码 ”产生数据窗口。其他的2个表用子数据窗口实现。
Hanson_bati_zhu 2003-08-08
  • 打赏
  • 举报
回复
另外
你创建这个交叉表数据窗口时用的SQL语句是什么?
是否还有优化的余地?
Hanson_bati_zhu 2003-08-08
  • 打赏
  • 举报
回复
e....
你的这几张表都加索引了吗?
zly999 2003-08-08
  • 打赏
  • 举报
回复
有没有建立Primary Key??
klbt 2003-08-08
  • 打赏
  • 举报
回复
估计是索引问题,建议在部门、商品名称建立索引。
pangxcai 2003-08-08
  • 打赏
  • 举报
回复
使用存储过程将数据先提取出来,然后在作为数据员。
zjd950131 2003-08-08
  • 打赏
  • 举报
回复
问题是:用的是sybase sqlanywhere80
如果用存储过程同样进行检索,我实验过速度还是很慢
SELECT "plan"."s_numid" ,
"plan"."s_goodsid" ,
"plan"."s_goodsname" ,
"plan"."s_gdslogo" ,
"plan"."s_gdsunit" ,
"plan"."f_imptpri" ,
"plan"."f_planqty" ,
"department"."s_deptname"
FROM "department" ,
"plan"
WHERE ( "department"."s_deptid" = "plan"."s_deptid" ) and ( "plan"."d_exedate" = :tao )

我想凭脑袋想当然是不行的,要做一下,才能体会他检索的速度慢,
学习就是一种研究的精神,希望大家亲自做一下,对自己是一种提高吧,
dingzhaofeng 2003-08-08
  • 打赏
  • 举报
回复
不好玩
tchatcha 2003-08-08
  • 打赏
  • 举报
回复
这个是难道吗?
Hanson_bati_zhu 2003-08-08
  • 打赏
  • 举报
回复
建议楼主把SQL贴上来
大家看看,说不定能够很简单的帮你解决问题的
Hanson_bati_zhu 2003-08-08
  • 打赏
  • 举报
回复
用SP有点大材小用了吧
这个需求分明用交叉表就可以解决的
现在的问题的关键是提高效率
从楼主的需求看,数据量不会很大,应该在一~二万条记录左右
如果SQL语句本身没有效率缺陷的话,不可能用10分钟的时间
除非和别人的事务发生阻塞
ldq_pb 2003-08-08
  • 打赏
  • 举报
回复
用存储过程,大家都说了

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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