MIN()函数问题

lj031125 2006-09-05 10:44:29
datasource2.DataSet:=Query1;
DBGrid1.DataSource:=datasource2;
with Query1 do
begin
close;
sql.Clear;
sql.Add('select * from FYtable where 欠收金额 in (select MIN(欠收金额) from FYtable
group by 客户编号)');
Open;
end;
====================================================
为什么DBGRID1显示的不是符合条件的数据:应该显示的是每个客户编号对应的最小欠收金额,但是现在显示的确实所有的数据;换成MAX(欠收金额)可以显示正确的数据,即每个客户编号对应的最大欠收金额,不知道为什么?
...全文
280 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lj031125 2006-09-06
  • 打赏
  • 举报
回复
TO:wudi_1982,试了,单独运行select MIN(欠收金额) from FYtable group by 客户编号
结果是正确的,显示的是每个客户编号对应的最小的 欠收金额;很奇怪的是我用MAX()函数单独和嵌套运行得到的结果都是正确的
----------
收费记录为:
ID 客户编号 总金额 实收金额 欠收金额
1 001 1000 1000 0
2 002 1000 500 500(第一次收500,欠费500)
3 002 1000 500 0 (第2次收500,欠费0)
4 003 100 80 20
============
想得到的结果是:
ID 客户编号 总金额 实收金额 欠收金额
1 001 1000 1000 0
3 002 1000 500 0
4 003 100 80 20
----------
错误结果为:
ID 客户编号 总金额 实收金额 欠收金额
1 001 1000 1000 0
2 002 1000 500 500
3 002 1000 500 0
4 003 100 80 20
============
用MAX()结果正常,谢谢上面的朋友帮顶!
lj031125 2006-09-06
  • 打赏
  • 举报
回复
TO:wudi_1982,试了,单独运行select MIN(欠收金额) from FYtable group by 客户编号
结果是正确的,显示的是每个客户编号对应的最小的 欠收金额;很奇怪的是我用MAX()函数单独和嵌套运行得到的结果都是正确的
----------
收费记录为:
ID 客户编号 总金额 实收金额 欠收金额
1 001 1000 1000 0
2 002 1000 500 500(第一次收500,欠费500)
3 002 1000 500 0 (第2次收500,欠费0)
4 003 100 80 20
============
想得到的结果是:
错误结果为:
ID 客户编号 总金额 实收金额 欠收金额
1 001 1000 1000 0
3 002 1000 500 0
4 003 100 80 20
----------
错误结果为:
ID 客户编号 总金额 实收金额 欠收金额
1 001 1000 1000 0
2 002 1000 500 500
3 002 1000 500 0
4 003 100 80 20
============
用MAX()结果正常,谢谢上面的朋友帮顶!
lj031125 2006-09-06
  • 打赏
  • 举报
回复
TO:erhan(二憨),非常感谢,试了下,结果正确分数太少,不好意思,3Q!
erhan 2006-09-06
  • 打赏
  • 举报
回复
最近的一个回复写错了,大概意思你应该明白的吧,主要是唯一性
erhan 2006-09-06
  • 打赏
  • 举报
回复
你可试一下,如果把id=1的欠收金额改成500,查询max就也不正确了
wudi_1982 2006-09-06
  • 打赏
  • 举报
回复
看了你的表,楼上说的正确
erhan 2006-09-06
  • 打赏
  • 举报
回复
主要原因就是光用欠收金额,无法定位到唯一的记录上,比如为最小0的有多个客户,所以查询不正确
erhan 2006-09-06
  • 打赏
  • 举报
回复
SELECT *
FROM test5
WHERE ((khbh + STR(qje)) IN
(SELECT khbh + STR(MIN(qje)) AS Expr1
FROM test5
GROUP BY khbh))

qje=欠收金额,khbh=客户编号
47522341 2006-09-05
  • 打赏
  • 举报
回复
金额值肯定不会是唯一索引吧,
所以出现什么结果都是可能的。
wudi_1982 2006-09-05
  • 打赏
  • 举报
回复
select MIN(欠收金额) from FYtable
group by 客户编号

把这一句单独执行,看看是什么结果。看看你的表结构。

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧