特急!重金求解SQL查询合并两个数据库!(200分)

  • 主题发起人 主题发起人 BLUE_SKY
  • 开始时间 开始时间
B

BLUE_SKY

Unregistered / Unconfirmed
GUEST, unregistred user!
1.现有两个FOXPRO数据库,一个为商品进货表DRB,其中字段LTSL记录了进货量,LTSJ记录了进货时间;
另一个为商品出货表DCB,其中字段LTSL记录了出货量,LTSJ记录了出货时间;现在要将两个表中按
给定的时间范围将LTSL合并,并产生一个新的查询结果,结果的记录要是DRB库中的记录(DRB库的记
录数多于DCB库中的记录数),并且不能重复。我做了几种方法,均达不到要求。
代码如下:
WITH QQUU DO
BEGIN
CLOSE;
UNPREPARE;
WITH SQL DO
BEGIN
//此处用于测试两个库的联合,目的是得到从调入库中扣去调出数量后得到的记录
//但无法去掉重复的记录
CLEAR;
ADD('SELECT HH,MC,YS,NEW FROM DRB,DCB ');
ADD('UNION ');
ADD('SELECT HH,MC,YS,(DRB.NEW-DCB.NEW) AS NEW ');
ADD('FROM DRB,DCB ');
ADD('WHERE (DRB.HH=DCB.HH) AND (DRB.YS=DCB.YS) ');
ADD('ORDER BY HH,YS,NEW ');
{
//此处用于是得到从调入库中扣去调出数量后得到的记录
//但只能显示记录少的库中的记录

ADD('SELECT HH,MC,YS,(DRB.LTSL-DCB.LTSL) AS NEW ');
ADD('FROM DRB,DCB ');
ADD('WHERE (DRB.HH=DCB.HH) AND (DRB.YS=DCB.YS) AND (DRB.LTSJ=DCB.LTSJ) ');
ADD('ORDER BY HH,YS,NEW ');
}
END;
PREPARE;
OPEN;
END;
特招榜向各位大侠能求助!!
2.另有一个问题,也一直无法解决!在DELPHI中有什么方法能更新FOXPRO库的CDX索引。我在程序
中一旦使用了SQL对这个库进行添加或删除后如果用FILTER查询就会丢失一些记录,但这些记录又
都在库中,尤其是用LOCATE查询时竟会莫名其妙地死机。在TABLE的AFTEROPEN事件中加入REFRESH
也没有用!有什么好的解决方法吗?
 
不太明白各字段具体的含义,但感觉应该用加和语句,按不可重复字段将结果加和即可,例如下
CLEAR;
ADD('SELECT HH,MC,YS,NEW FROM DRB,DCB ');
ADD('UNION ');
ADD('SELECT HH,MC,YS,(DRB.NEW-DCB.NEW) AS NEW ');
ADD('FROM DRB,DCB ');
ADD('WHERE (DRB.HH=DCB.HH) AND (DRB.YS=DCB.YS) ');
ADD('[blue]group by DRB.HH[/blue],DRB.YS ORDER BY HH,YS,NEW ');
{
//此处用于是得到从调入库中扣去调出数量后得到的记录
//但只能显示记录少的库中的记录

ADD('SELECT HH,MC,YS,(DRB.LTSL-DCB.LTSL) AS NEW ');
ADD('FROM DRB,DCB ');
ADD('WHERE (DRB.HH=DCB.HH) AND (DRB.YS=DCB.YS) AND (DRB.LTSJ=DCB.LTSJ) ');
ADD('ORDER BY HH,YS,NEW ');
 
[red]楼上delphihha朋友,运行后提示'Expressions in group by are not supported.'因为我的
NEW字段是动态生成的。像这种动态生成的字段,在SQL语句中用GROUP BY 怎么写呢???[/red]
 
依靠什么区分是否相同?你的意思是,进货方式和出货方式完全一样,仅仅是时间不同?
还是仅仅象你代码中写的 相减?

简单的想,完全可以不必要建立什么NEW
直接 按你的条件分组 sum(drb.ltsl),sum(dcb.ltsl)
分别放在dbgrid中两列(这个你能实现吧), 这两列可显示,可不显示
dbgrid中建立一个新的自动计算列就可以了
 
我的意思是:DRB与DCB两张表已是经过一些处理后得到的货物调入表与调出表,合并两张表
的目的也是为了下一步处理。HH为货号,YS为颜色,两张表中HH与YS相同的记录才合并。难
道没有哪个富翁有建设性的处理方法吗?
 
加和按新字段计算方法:
ADD('SELECT HH,MC,YS,NEW FROM DRB,DCB ');
ADD('UNION ');
ADD('SELECT HH,MC,YS,(DRB.NEW-DCB.NEW) AS NEW ');
ADD('FROM DRB,DCB ');
ADD('WHERE (DRB.HH=DCB.HH) AND (DRB.YS=DCB.YS) ');
ADD('group by DRB.HH,DRB.YS,DRB.NEW-DCB.NEW ORDER BY HH,YS ');
不过,不明白为何要按计算值加和?
 
Foxpro数据库 不支持 union 连接的
 
多人接受答案了。
 
后退
顶部