主题:如何汇总统计? 小弟实在想不出什么办法!
yuanyu117
[专家分:150] 发布于 2007-03-09 22:00:00
我有一个收货表"inrec",另一个出货表"outrec",
各有recid,date,movt,inqty(outrec),remarks
现在,需要一个统计,统计出所以机芯(movt字段)的出入数,当然有些有收货而没有出货,
我用了select...inner join..on.
结果, 只能显示有收货也有出货的数据,
无法查到所有的库存货.....
即无显示有收货而没有出货的数据!
求求各位大侠..急急急....
在线等!
最后更新于:2007-03-12 14:45:00
回复列表 (共25个回复)
沙发
moz [专家分:37620] 发布于 2007-03-09 23:16:00
是不是进出都是按批次进行的?
以 ID 为批次号?
你试试,我水平太低,你有问题要提出来给我学习学习,我不保证我的建议是正确的.
select recid,date,movt,inqty,remarks from inrec where recin not in ( select recid from outrec )
板凳
yuanyu117 [专家分:150] 发布于 2007-03-09 23:59:00
不是这样的!
3 楼
moz [专家分:37620] 发布于 2007-03-10 01:41:00
如果不以批次为单位,而单独有数量的概念的话
是不是可以建一临时表,以需要的时间段先建进库的查询,
然后追加出库的查询(数量变为负数)
最后按型号累计,结果就是库存量了.
4 楼
yuanyu117 [专家分:150] 发布于 2007-03-10 07:56:00
不可以这样的,因为在看的时候要知道收货总数,和出货总数,
有这样的
inid date movt inqty remarks
in0001 01/01/07 vc00 1000 memo
in0002 02/01/07 vc01 200 memo
in0003 03/01/07 vc01 300 memo
outid date movt outqty remarks
out0001 01/01/07 vc00 500 memo
而想要得到的效果是:
movt intotal outtotal balance
vc00 1000 500 500
vc01 500 0 500
头痛啊....有哪位大侠可以帮帮忙啊????
5 楼
jinlonggao [专家分:17130] 发布于 2007-03-10 08:18:00
学编程要掌握基本知识,楼主用的是内连接,按照楼主要实现的目标,应该用左外连接才行.请楼主仔细看一看表连接的相关知识.
select ...from a left (outer) join b on ...
-------------------------------------------------------------
JOIN连接具体分为以下几种:
INNER JOIN :显示符合条件的记录,此为默认值;
LEFT (OUTER) JOIN:显示符合条件的数据行以及左边表中不符合条件的数据行,此时右边数据行会以NULL来显示,此称为左连接;
RIGHT (OUTER) JOIN:显示符合条件的数据行以及右边表中不符合条件的数据行,此时左边数据行会以NULL来显示,此称为右连接;
FULL (OUTER) JOIN:显示符合条件的数据行以及左边表和右边表中不符合条件的数据行,此时缺乏数据的数据行会以NULL来显示;
CROSS JOIN:会将一个表的每一笔数据和另一表的每笔数据匹配成新的数据行。
当将JOIN 关键词放于FROM子句中时,应有关键词ON与之相对应,以表明连接的条件。
6 楼
yuanyu117 [专家分:150] 发布于 2007-03-10 09:00:00
非常感激高先生,再问一下,
中间出现了.null,
请问要怎么消除..
要达到的效果:
movt intotal outtotal balance
vc00 1000 500 500
vc01 500 0 500
结果现在变成了:
movt intotal outtotal balance
vc00 1000 500 500
vc01 500 .NULL .NULL
有什么办法可以变成原本想要的效果呢?
7 楼
moz [专家分:37620] 发布于 2007-03-10 10:32:00
我试试用,大家看看评改一下:
SELECT Movt,inqty,000 as Outqty,000 as bolance FROM inrec INTO CURSOR tmpABC readwrite
INSERT INTO tmpABC (Movt,Inqty,Outqty,Bolance) SELECT Movt,0,outqty,0 FROM outrec
SELECT movt,SUM(Inqty)as Inqty,SUM(outqty)as Outqty,SUM(inqty-outqty)as bolance FROM tmpABC GROUP BY 1 ORDER BY 1
要注意有三位数,就需要用三个 000 ,呵呵,不然不知道你的宽度,就只有一个0就会变*号了
8 楼
esailor [专家分:2650] 发布于 2007-03-10 15:52:00
试了整整一天(深感本人知识太少),得出下列代码:
create cursor tt1 (movt c(4),intotal n(6),outtotal n(6),balance n(6))
insert into tt1 select movt,sum(inqty),0,0 from inrec group by movt
insert into tt1 select movt,0,sum(outqty),0 from outrec group by movt
select movt,sum(intotal) as intotal,sum(outtotal) as outtotal,sum(intotal-outtotal) as balance from tt1 into cursor tt2 group by movt
list
执行后,显示结果为:
MOVT INTOTAL OUTTOTAL BALANCE
vc00 1000 500 500
vc01 500 0 500
9 楼
yuanyu117 [专家分:150] 发布于 2007-03-10 17:44:00
回8楼,谢谢您,
不过我在用你那些语句的时候,
系统提示"语法错误"
这到底是什么回事,
你的知识少,我可比你更少啊!!!
10 楼
yuanyu117 [专家分:150] 发布于 2007-03-12 08:00:00
有没有人给我一个答复啊????
insert into ... select...from...
有语法错误啊...怎么回事呢?
我来回复