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

  • 主题发起人 主题发起人 mo
  • 开始时间 开始时间
TO:goaha兄
能否把你的:"先把各年份的单价集中到一个表里"的想法说详细点;最好要语句写出来
这里有一个问题:你并不知道有多少PODJ**** 表的啊?
 
可以用如下语句,求得所有年份单价表
select name from dataB.dbo.sysobjects where type='u'
and substring(name,1,4)='PODJ'
然后再用循环或游标操作构造出完美的sql语句:
select alldj.* into #dj from
(select '01' as year, * from dataB.dbo.PODJ2001
union select '02' as year, * from dataB.dbo.PODJ2002
union select '03' as year, * from dataB.dbo.PODJ2003
union ....
) alldj

好象你刚注册进DFW,就是为了解决这个问题?
我的答案其实很有商业价值。
 
TO:goaha
谢谢你了,我先试试了;我来DFW注册是不久,不过以前也上来看人家的东东

 
TO:goaha
我把试了下还不行啊
select * into #dj from
(
select PO号,型号,单价 from podj2001
select PO号,型号,单价 from podj2002
)

说:')'附近有语法错误;

 
可以将这多个表合并成一个,加一个字段用来区分所属类型。
 
to:荷塘新月
可以说详细一点吗?最好能用语句说下了
先谢谢了
 
To mo:
你的sql基本功不行,你试试:
select aa.* into #dj from
(
select PO号,型号,单价 from podj2001
union select PO号,型号,单价 from podj2002
) aa
select * from #dj
drop table #dj
 
TO:goaha兄
首先让我再一次感谢你;
你的方法在SQL SERVER中能用,但到了DELPHI中就有一个问题了:
var
podjname:string;


sysobjectsQuery.close;
sysobjectsQuery.sql.clear;
sysobjectsQuery.sql.add('select name from sysobjects ');
sysobjectsQuery.sql.add('where (type=''u'')and(substring(name,1,4)=''PODJ'') ');
sysobjectsQuery.prepare;
sysobjectsQuery.open;

podjname:='';
sysobjectsQuery.first;
podjname:=sysobjectsQuery.fieldByName('name').asstring; //**** 在这从错了(下面的代码还不知对不对),说'name'找不到;
//**** 是不是这个字段在DELPHI里是不可见的,要怎样解决呢?
sysobjectsQuery.sql.add('select aa.* into #dj from ( select po号,型号,规格,单价 from '+''+podjname+''+' ( ');

while not(sysobjectsQuery.eof) do
begin
sysobjectsQuery.next;
sysobjectsQuery.sql.add('union select po号,型号,规格,单价 from '+''+podjname+''+' ');
end;
sysobjectsQuery.sql.add(' )aa ');

sysobjectsQuery.sql.add('select a1.po号,a1型号,a1规格,b1.单价,(a1.数量*b1.单价) as 合计 ');
sysobjectsQuery.sql.add('from [kf_hcgl].[dbo].ckdj200011 a1 inner join #dj b1');
sysobjectsQuery.sql.add('drop table #dj');
sysobjectsQuery.open;

请求帮忙解决出错处,感谢不尽!
 
各位大侠:

为什么在DELPHI中查询SQL SERVER中的 sysobjects 表,却无法显示
它的name字段?
 
你把sysobjects 改成xxxx.dbo.sysobjects 试试, xxxx为数据库名称
我被你搞得有点不耐烦了,这个问题我就回答到这里。

 
不好意思goaha兄,打搅你这么多次;不过我只是想把问题搞清楚是怎么回事;
但把sysobjects 改成了xxxx.dbo.sysobjects以后,还是同样的错误:
sysobjectsQuery:Field 'name' not found; 我试了打开pubs库中的sysobjects 表还是同样的问题;

最后让我再一次感谢goaha兄及各位大侠们的帮助,谢谢了;这个问题我打算从别的角度去
考虑了;

 
to mo :
你试试把 select name ... 改成 select [name] ... , 再不行我就。。。
我在我的机器试过,上面两种写法都可以。我的环境是D6+WIN2000SEVER+SQL2000+BDE.
我再细看了一下这个问题,其实llh_lily的答案也不错,
他的写法可能对你来说有点难理解,其实是他的作法与我的作法是差不多的。
 
TO:goaha兄
有你这个答案我就够了。谢谢你!
本来打算不理这个问题的了;但没搞清楚,心里又点讲不出的昧道;我很想知道一个原因;
现在我明白了;我的环境:D5+Win2000Server+SQL2000+BDE.
 
To mo:
真太让人失望,好心好意给人回答了问题,竟没反应,而且我已试了非常成功。你就是一点都不相信,
sysobjects 表不的创建者不是一般的表User而是系统表system
 
to btxiaoyao:
我在上面的帖子本来是想说你的答案不错的,结果把你的名字写成了llh_lily。
在我遇到的人中,应当你的MSSQL最厉害的。
交个朋友吧。
 
TO:btxiaoyao兄
首先还是让我再次感谢你与goaha兄;
其实你误会了,说真的不怕你笑话,于对MSSQL我接触时间才几个月(以前只在单机上用DELPHI用到一些简单的查询语句
这也是第一次做C/S数据库管理软件);为此对于存储过程只是有点了解,但不熟;从没用过;今天才开始认真的再看了些存储过程的资料;
现在上来就是打算把你发的代码COPY下去认真的试试;请不要笑我,因为我第一次看到你的代码时,觉得自己不怎么懂,为此就
暂时放在一边,开始试goaha兄的代码了;打算等对存储过程清楚了点后再来研究你的代码的。

对于sysobjects 表,在我另一个贴子里SoftBoy兄的办法可以用的;

btxiaoyao兄:说真的,在我感觉中你与goaha兄都是十分了不起的高手;如果你们不嫌我烦的话,以后有问题我会常问你们的;
对于这一行我才刚刚入行,希望你们能多关照!更希望能跟你们交个朋友。

小弟在这再次:谢谢你们了!有机会到东莞这边来小弟我请客!
E-Mail: mxp629@163.net
QQ:55875494


 
气氛不错吗。
 
对于这个问题讨论得挺热烈的。
但我发现大家的解决方法其实是异曲同工的。
基本都是先将分布在不同单价表的单价生成到一个‘单价表’,这实际上是解决了mo原先
数据结构的缺陷。也是解决了这个问题的难点。在这之后的查询就应该算是常规查询了。
但我不知道mo的需求是什么,即你所要求的总额是一份出货单中的总额还是所有历史出货
记录的总额。假如你所要查的是所有历史出货记录的总额那么通过sysobjects表查出所有的
单价表是值得的,但假如所要查的只是一份出货单中的总额或若干份出货单中的总额,那需要
每次都遍历所有的单价表吗?是否可能做了多余的操作呢?
我觉得原先单价表的命名已具备一定的规则,可以不需要查询sysobjects.我认为在工作量上
是有多余的。当然假如数据不规范时,比如根据出货单中的Po号获得的相应单价表不存在时
那样的话查询sysobjects就更为可靠。
我不知大家是否认同我的看法。也许有我未认识到的问题。
 
首先非常感谢大家来关心这个问题;我很高兴这个问题能有这么多人来关心
可能是我以前没说明白我的问题吧,让大家有多种理解了;为此我再说说我所需要的东东;.

1、我需要每个月出货总表中的各种 物料、型号、规格、PO号 的合计金额;
例如:
A类需求: 物料名 合计
a1 7.00
aaa 100.00

总计金额:107.00
B类需求: 物料名 型号 合计
C类需求: 物料名 型号 规格 合计
a1 a11 d 3.00
a1 a11 x 4.00

总计金额:7.00
2、还要一个当个月出货的总金额,如上;
3、有些朋友说应该把有单价的表放在一个表中,我觉得这样不好;
因为,单价表永远都是在为断的增加的,每买一次物料就要记一次单价的;
若只放在一个表里,那当它的记录超过了SQL数据表所要求的记录的范围怎么办?
为此我选择了每年一个表,因我公司现在每年下的PO有9000多个;而每个PO以可能有
多个物料的报价,那么就是说每年的当价表就会至少有上万条记录;(具体有多少条采购员也不知道);
4、我自己的一个办法:在出货登记表结构中加一单价记录;每次出货时,当出货员在写入PO号
的时候,系统跟据PO号断定所属的PODJ年,读入相应的单价;以后做什么统计的就很方便了
只是,我担心这种办法很麻烦,若每次出货要出很多,那么PODJ表就要打开数次了
5、我现在用的是goaha兄的办法,试了下已经可行了;现在正在试储存过程;若试储存过程
效率高很多的话;我将采用btxiaoyao兄的方法;

最后再次感谢大家的关注,若有朋友想要源码的话,我可以把它贴上来。


 
这帖子看得满爽的,恩……,好
 
后退
顶部