两条记录我只取一条怎么办?(50分)

  • 主题发起人 主题发起人 我行我酷
  • 开始时间 开始时间

我行我酷

Unregistered / Unconfirmed
GUEST, unregistred user!
在表HT中,有如下一些数据
合同号 己付金额
0101 100
0101 0
0102 200
0103 0
0103 120
0104 0
0105 544
相同合同号的一组数据只取其中己付金额不为0的那一组?备注:一般相同合同号的记录只有两组,一组的己付金额为0 ,一组不为零.

如何用SQL语言来实现...请各位达人帮忙一下.
 
select * form Table where 己付金额<>0
 
select max(已付金额),合同号 from jfb2 group by 合同号
已付金额应该不会是负的吧?
 
应该用
select * form Table where 己付金额<>0
就可以了吧
 
如何两个记录都为零的话,楼上的方法会漏掉部分合同号吧,但不知道有没有这种可能性?
 
select max(已付金额),合同号 from jfb2 group by 合同号
 
Select * from table1 a where 己付金额<>0 --两组以上记录.
union all --只有一组记录情况.
Select * from table1 a where exists (Select * from (Select 合同号,count(*) rec from table1 group by 合同号) b where b.rec=1 and b.合同号=a.合同号)
 
可能是我没有说得太明白或是大家误解了我的意思:一个合同号可能有两条记录,或是只有一条记录,只有一条记录的它的己付金额也有可能为0,像这样子的肯定不对啦,select * form Table where 己付金额<>0 我是想除去表中有相同合同号的两条记录中的己付金额为0的那条记录,而把表中其他的记录显示出来.
 
我那个就可以啊,除非你还要显示别的字段.
 
对所有合同号相同的记录进行己付金额求和啊
 
select * from HT A where A.已付金额=(select max(B.已付金额) from HT B where B.合同号=A.合同号)

这个肯定可以
 
赞一个,魏启明的方法简单.
 
delete <> from where ?=(select <....> where <....> )
大体这样
 
hityou你说的是,就是要显示其他的字段.
魏启明的方法真是不错,我去试一下.
 
不对啊,用sum&max一样的,都是聚合函数,我晕啊
 
select 合同号,Max(已付金额) From Table1 Group By 合同号;

不过如果表的数据太大的话就有点慢了。
 
当时也没想到sum与max在这里起到的功能是一样的.
bruesz的做法,这样子就无法显示其他字段了.只能显示己付金额和合同号.
 
select * from HT A where A.已付金额=(select max(B.已付金额) from HT B where B.合同号=A.合同号)

拜托,你怎么就不看看我上面写的哪个啊,难道不能满足你的需要?
 
就单独要合同号和 金额的话
select 合同号,sum(己付金额) from HT Group by 合同号
真要其他字段就来个left join select 其他字段 from HT b on a.合同号 = b.合同号
 
To hityou
呵呵!那样子可以.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
I
回复
0
查看
1K
import
I
后退
顶部