求助:一个关于统计的问题;我的积分全给你(200分)

  • 主题发起人 主题发起人 mo
  • 开始时间 开始时间
M

mo

Unregistered / Unconfirmed
GUEST, unregistred user!
服务器数据库系统:sql server 2000
数据库1:dataA
表:ck200011 含字段:PO号,数量
数据库1:dataB
表:tablenameB 含字段:PO号,单价

注:表tablenameB 不确定,它可由表ck200011中的字段“PO号“确定;
如:PO号为 ' N012233 ' 的时候,其中第二,三位的'0''1'表示为2001年的PO号,就是说
tablenameB 的名字应该为 PODJ2001

PO号为 ' N022233 ' 的时候,其中第二,三位的'0''1'表示为2002年的PO号,就是说
tablenameB 的名字应该为 PODJ2002


问题: 求ck200011的总额
with zjQuery do
begin
close;
sql.clear;
sql.add(' ??????????? ') //这些语句怎么写?
open;
end;


// 我的积分全给你
 

各位大侠:这个问题可以解决吗?
 
急!我在等等着你们的好办法
 
你的:
  其中第二,三位的'0''1'表示为2001年的PO号,就是说tablenameB 的名字应该为 PODJ2001

我不大明白。
 
with zjQuery do
begin
close;
sql.clear;
sql.add('select sum(a.数量*b.单价) from ck200011 a, (
select PO号, 单价 from PODJ2000 union
select PO号, 单价 from PODJ2000 union
select PO号, 单价 from PODJ2000) b /*有些数据库语言需要加AS b*/
where b.PO号=a.PO号');
) //这些语句怎么写?
open;
end;
 
关注。测看看。
 
TO:yhaochuan
PO号为 ' N012233 ' 的时候,其中第二,三位的'0''1'表示为2001年的PO号,就是说
tablenameB 的名字应该为 PODJ2001

也就是说:表ck200011中PO号为 ' N012233 ' 的时候,应该打表 PODJ2001 ;然后再读出与ck200011中的PO号对应的'单价;
ck200011.数量 * PODJ2001.单价 就可知到这个当前记录的PO号用了多少钞钞了






 
能否将表结构和典型的几第记录列出来呢?

ck2000:
cloumnname1 price
PO 3.4


POtable
cloumnname1 quantity
PO 20
PO2 30
 
to:zjQuery兄
tablenameB 表名是一个不固定的名字,当ck200011中的PO号为 N022233的时候,打开的表
应该是 PODJ2002 (2002年的PODJ表了),而不再是PODJ2000(2000年的PODJ表了) 啊
这样的话
sql.add('select sum(a.数量*b.单价) from ck200011 a, (
select PO号, 单价 from PODJ2000 union
select PO号, 单价 from PODJ2000 union
select PO号, 单价 from PODJ2000) b /*有些数据库语言需要加AS b*/
where b.PO号=a.PO号');

就读不了PODJ2002 中的单价了

希望你能继续帮助,先谢谢了
 
照上面的意思,POXXX有多少个你就得有多少个表,而且每个表只有一条记录了?
 
TO: yhaochuan

表 ck200011 (指2000年11月份的出货登记表)
物料名 型号 PO号 出货数量
a1 1abc N010012 50
s www N020123 20
xyz 2343 N013424 90
s 4321 N013427 1000
...
:PODJ2002 (好比2002年的单价登记表)
物料名 型号 PO号 单价 交货期
s www N020123 7.50 2002-1-2
...

:PODJ2001 (好比2001年的单价登记表)

物料名 型号 PO号 单价 交货期
a1 1abc N010012 3.4 2001-5-9
xyz 2343 N013424 63.75 2001-10-8
s 4321 N013427 3.45 2001-8-10
...





 
我想得用存储过程及游标。
首先读出ck200011 含字段:PO号,数量
从PO号获得年号再生成tableB的表名。
获得表名后,从表中查出单价。进行计算。将总额再累加。
不过可速度会很慢。要测过才知。
 
语句没错,只是2001,2002大意了。
select sum(a.数量*b.单价) from ck200011 a, (
select PO号, 单价 from PODJ2000 union
select PO号, 单价 from PODJ2001 union
select PO号, 单价 from PODJ2002) b /*有些数据库语言需要加AS b*/
where b.PO号=a.PO号'
 
TO: yhaochuan

也可以这么说吧,只是有点夸张了吧;在实际当中一般是一个表的,但也有是两个表的,三个表可能就没有了,但不绝对;
好比:
2001年12月下的订单(这时才跟客户说好价钱,于是下了订单,就登记好;PODJ2001),可能是2002年2有才交货的,而货仓在2002年3月份才出货的(ck200203);
当你算2002年3月份成本时,就要用到2001年登记的单价了(PODJ2001)
(2002年3月份才出货的物料也可能是2000年就已下了订单的事,可能是没有的;但如果有呢?编程时就要考虑了)

 
我想要统计这些可能要用至少两个table(query)控件,
每一个查CK所有记录,得到PO后产生SQL用第二个查然后再计算quantity*Price了。
你的表为什么要设计成这样呢?如果要加一个PO2003的时候不得再建立一个表?
这完全没有用到关系数据库的长处,得更表的设计,我想一下该怎么做。
 
各位大侠们:
小弟也有一种办法,就是把ck200011的每条记录一条条读,当读一条时就能过PO号判断是哪年下的订单;
从而就得到是PODJ2000或PODJ2001还是PODJ2002;从中读出单价;
当读的是ck200011的第一条记录时就在客户机端建立一个新数据表
表结构如下: ( JG )
物料名 型号 PO号 单价 出货数量 合计金额
以后读出的每条记录数据就加入表JG中

只是我认为这样太慢了;太复杂了;

为些还得请各位大侠们告诉小弟一个更好的办法


 
TO: yhaochuan
等待着你的帮助;
 
说说
物料、型号、PO号之间的关系,
现在我知道同一种名称的物料有不同的型号,那型号和PO号之间又有什么关系(或联系)呢?
 
一个PO号内可有多个型号,多个单价
但同型号、同PO号的物料只有一个单价
同型号、不PO号的物料的单价可能不同,也可能相同


 
select sum(a.数量*b.单价) from ck200011 a, tablenameB b
where SUBSTRING(a.PO号,2,2)=RIGHT(b.PO号,2)
 
后退
顶部