ID    缴费号码    金额
1     139139139    50
2     139139139    40
3     139139131    50
4     139139137    70
5     139139138    100
5     122122122    40
如何找出
1     139139139    50
2     139139139    40
这样的缴费号码相同 金额不同的记录

解决方案 »

  1.   

    select t.缴费号码,t.金额 from table t group by t.缴费号码,t.金额
      

  2.   

    select t1.* from table t1,(select t.缴费号码 num1 from table t group by t.缴费号码 having(count(1)>1)) where t1.缴费号码=num1 order by 缴费号码;
    是这样? 
      

  3.   

    他的意思是问你id 是不是唯一的。如果有唯一标示做起来简单很多。
    一般来说id应该是主键了,但是你给的数据有两个5,是笔误还是数据就是这样的
      

  4.   

    表述的不清楚
    如果有这样的数据你要什么呢
    1 139139139 50
    2 139139139 40
    3 139139139 40a:
    1 139139139 50
    2 139139139 40b:
    1 139139139 50
    2 139139139 40c:
    1 139139139 50
    2 139139139 40
    3 139139139 40
      

  5.   

    我随便写的ID 实际上是时间来表示唯一主键如果有那样的数据应该是C
      

  6.   

    select 缴费号码 from 表 group by  缴费号码 having count(*)>1这个可以查出缴费号码重复的记录,然后在做自己的操作
      

  7.   

    也就是说要求符合如下条件的行:表中有一行和他号码一样金额不一样。
    id还和那个问题一样,把id换成时间就好。主键很重要。
    想到了一个很有趣的方法。oracle 关于集合的集合比一行行处理要快.对了这个方不用主键。加上主键列只是为了让结果看起来更清楚。with aa as

     select t.id,t.no,t.fee,
            count(1) over(
                          partition t.no 
                          rowsbetween unbounder preceding and unbounder following
                         ) times, --这一条缴费记录中的号码的缴费次数
            max(fee) over(
                          partition t.no 
                          rowsbetween unbounder preceding and unbounder following
                         ) max_fee, --这一条缴费记录中的号码的最大缴费金额
            min(fee) over(
                          partition t.no 
                          rowsbetween unbounder preceding and unbounder following
                         ) min_fee, --这一条缴费记录中的号码的最小缴费金额
     from t

    select id,no,fee
    from aa
    where times>1           --缴费次数>1
    and  max_fee<>min_fee--该记录的最大缴费金额不等于最小缴费金额,换言之总有一个跟本次金额不同    
      

  8.   

    其实可以这样考虑:只要该号码的最大缴费金额跟最小缴费一样就证明要么只交过一次费,要么所有所有金额一样。只要剔除这些列就好了。所以上面的语句可以用去掉times列
    简化为这样:select *
    from t
    where t.no  in( select no
                       from t
                       gruop by no
                       having max(fee)<>min(fee)
                       )
      

  9.   

    实际操作不要用*,用no,fee
    入过你的no fee有非空约束的联合索引select no fee from的速度是很快的