数据如下:
日 期 单据号 库存位置
2003/07/12 B00001 A10000
2003/07/12 B00001 A10000
2003/07/12 B00001 A10000
2003/07/12 B00001 Q10000 *
2003/07/12 B00001 A10000
2003/07/13 C00001 B20000
2003/07/13 C00001 B20000
2003/07/13 C00001 B20000
单据号中的一组数据有n个,而其所对应的库存位置也同样的n个,注意,一组相同单据号其对应的库存位置也是相同的。怎么写才能查出这些数据中“库存位置”出错的单据号?如上*号部分即为出错的库存位置。
日 期 单据号 库存位置
2003/07/12 B00001 A10000
2003/07/12 B00001 A10000
2003/07/12 B00001 A10000
2003/07/12 B00001 Q10000 *
2003/07/12 B00001 A10000
2003/07/13 C00001 B20000
2003/07/13 C00001 B20000
2003/07/13 C00001 B20000
单据号中的一组数据有n个,而其所对应的库存位置也同样的n个,注意,一组相同单据号其对应的库存位置也是相同的。怎么写才能查出这些数据中“库存位置”出错的单据号?如上*号部分即为出错的库存位置。
where 单据号='B00001'
and not ( 库存位置 ='Q10000')
你说Q10000库存位置是错的,
计算机有可能认为你的A10000位置是错的呢!!!
没有一个标准,怎么判断你哪个是对的呀??????
-----------------------------------------------
这跟谁是不是错误,并无多大关系,你只需找出存在这种问题的数据就行了。我认为这个问题一点也不矛盾嘛!!!大家怎么会误解呢?如果一个B00001单据对应的都是A10000,则绝对没问题,就算B00001只有两笔,其中一笔是A10000库存,另一笔是Q10000,那么它肯定也是有问题的,我只要查出这种错误就行了,并不用计算机判断哪条是错,哪条是对!
(select count(a.djh) as djh from A a
where a.djh='') a,
(select count(b.kcwz) as kcwz from A b
where b.djh='') b
where a.djh>b.kcwz
这是根据你输入的单据号来判断它的对应的位置是否正确!!!
我用上述语句查过,可以执行,没找出数据。
(select a.djh,count(kcwz) as kcwz from A a
group by a.djh) a,
(select a.djh,count(a.djh) as djhcount from A a
group by a.djh) b
where a.kcwz>b.djhcount and a.djh=b.djh
Query1.sql.clear;
Query1.sql.text:='select 单据号,count(库存位置) as 库存位置数量 from 表
group by 单据号
having 库存位置数量>1';
Query1.open;
if Query1.recordcount>0 then
数据有问题;
////////////////////////
刚写的,你试一下。
谢谢ziqing(紫情)