免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1314 | 回复: 4
打印 上一主题 下一主题

请问写怎样SQL语句能高效地实现如下功能? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-08-08 18:40 |只看该作者 |倒序浏览
有两张表,一张是SPPCR,记录ID、库存批次、商品代码、业务发生日期的表,字段分别为ID、KCPCH、PRODID、RQ;另一张表是YWLX,记录具体业务类型的,字段分别是ID(ID)、业务类型(LX)、数量(SL)、金额(JE),其中
WHEN LX=10 JE 表示销售金额
WHEN LX=30 SL 、JE 分别表示销售数量、销售成本
WHEN LX=11 SL 、JE 分别表示销售数量_批发、销售金额_批发
WHEN LX=7 SL 、JE 分别表示报损数量、报损金额
表SPPCR与表YWLX以ID唯一关连。
要实现如下查询结果
日期 ID  库存批次号  商品代码 销售金额、销售数量、销售成本、销售数量_批发 销售金额_批发 报损数量 报损金额


请问有没有高效的SQL语句(SPPCR与YWLX中的记录都是上百万条)?

论坛徽章:
0
2 [报告]
发表于 2003-08-09 09:42 |只看该作者

请问写怎样SQL语句能高效地实现如下功能?

每个id记录中都只有一种业务类型lx还是有四种业务类型?

论坛徽章:
0
3 [报告]
发表于 2003-08-11 10:01 |只看该作者

请问写怎样SQL语句能高效地实现如下功能?

在YWLX表中ID 和LX字段为唯一索引,即同一个ID会有多种类型。

论坛徽章:
0
4 [报告]
发表于 2003-08-11 18:42 |只看该作者

请问写怎样SQL语句能高效地实现如下功能?

SELECT
A.RQ,A.ID,A.KCPCH,A.PRODID,
(SUM(A.JE*(1-ABS(SIGN(B.LX-10))))) '销售金额',
(SUM(A.SL*(1-ABS(SIGN(B.LX-30))))) '销售数量',
(SUM(A.JE*(1-ABS(SIGN(B.LX-30))))) '销售成本',
(SUM(A.SL*(1-ABS(SIGN(B.LX-11))))) '销售数量_批发',
(SUM(A.JE*(1-ABS(SIGN(B.LX-11))))) '销售金额_批发',
(SUM(A.SL*(1-ABS(SIGN(B.LX-7))))) '报损数量',
(SUM(A.JE*(1-ABS(SIGN(B.LX-7))))) '报损金额'
FROM SPFPCR A,YWLX B
GROUP BY A.RQ,A.ID,A.KCPCH,A.PRODID
WHERE A.ID=B.ID

优不优化,就要把列表域及group字句的组合调整得尽量与表的组合索引一致

论坛徽章:
0
5 [报告]
发表于 2003-08-11 18:52 |只看该作者

请问写怎样SQL语句能高效地实现如下功能?

SPFPCR为什么这样设计?

  spfpcr是日记帐吗?当日发生才插批次是不?
如是这样,应该有批次成本平衡的表间关系,把销售作为记录写入,混在一起,作什么用呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP