39W0138 2013/09/22  1111 RMB 1110052-0-00  
39W0138 2013/09/22  1111 RMB 1110052-0-00  
39W0139 2013/09/23  3333 JPY 1110052-0-00  
39W0139 2013/09/23  3333 JPY 1110052-0-00  
39W0146 2013/09/22  3333 RMB 1110052-0-00  
39W0146 2013/09/22  3333 RMB 1110052-0-00  
39W0147 2013/09/22  3333 RMB 1110052-0-00  
39W0147 2013/09/22  3333 RMB 1110052-0-00  
39W0159 2013/09/11  3333 RMB 1110052-0-00  
39W0159 2013/09/11  3333 RMB 1110052-0-00  
39W0159 2013/09/11  3333 RMB 1110052-0-00  
39W0179 2013/09/27  3333 JPY 1110052-0-00  
39W0179 2013/09/27  3333 JPY 1110052-0-00  
39W0179 2013/09/27  3333 JPY 1110052-0-00  
39W0180 2013/09/27  3333 JPY 1110052-0-00  
39W0180 2013/09/27  3333 JPY 1110052-0-00  
39W0180 2013/09/27  3333 JPY 1110052-0-00  
39W0181 2013/09/22  4205 USD 1110052-0-00  
39W0181 2013/09/22  4205 USD 1110052-0-00  
39W0181 2013/09/22  4205 USD 1110052-0-00  
39W0182 2013/09/22  3133 HKD 1110052-0-00  
39W0182 2013/09/22  3133 HKD 1110052-0-00  
39W0182 2013/09/22  3133 HKD 1110052-0-00  
39W0190 2013/09/30  3333 RMB 1110052-0-00 31321
39W0190 2013/09/30  3333 RMB 1110052-0-00 31321
39W0190 2013/09/30  3333 RMB 1110052-0-00 31321怎么在查询的时候去显示重复的数据
使用了  select distinct A,X from table   没效果
使用 group by  也没效果   
上面的数据是我需要用到的数据,该表还有一些列没有显示出来,是不是这些没有显示出来的列影响了上面的方法?
大神们  出现吧!   要改项目   很急!!!!!!!!!!oracleselect

解决方案 »

  1.   

    描述不清楚,是要去除这些重复字段的数据,还是要显示这些重复字段的数据?如果是去除,那么:假设这些重复的列分别为a,b,c,d,那么
    select * from (
    select t.*, row_number() over(partition by a,b,c,d order by e) rn from t
    ) where rn = 1;如果是显示重复,那么用count() over(),取rn > 1可以看看分析函数的用法。
      

  2.   

    1楼正解:
    如下也可以查询重复的数据select col1,col2 from table group by col1,col2 having count(1)>=2
      

  3.   

    如果是部分字段重复 还是推荐用row_number() over()排序取数
      

  4.   

    1 39W0138 2013/09/22  1111 RMB 1110052-0-00 32.000 0 1
    2 39W0139 2013/09/23  3333 JPY 1110052-0-00 239208.000 0 1
    3 39W0146 2013/09/22  3333 RMB 1110052-0-00 23.000 0 1
    4 39W0147 2013/09/22  3333 RMB 1110052-0-00 0.000 0 1
    5 39W0159 2013/09/11  3333 RMB 1110052-0-00 324.000 0 1
    6 39W0159 2013/09/11  3333 RMB 1110052-0-00 0.000 0 1
    7 39W0179 2013/09/27  3333 JPY 1110052-0-00 23.000 0 1
    8 39W0179 2013/09/27  3333 JPY 1110052-0-00 12.000 12 1
    9 39W0180 2013/09/27  3333 JPY 1110052-0-00 20.000 0 1
    10 39W0180 2013/09/27  3333 JPY 1110052-0-00 23.000 23 1
    11 39W0181 2013/09/22  4205 USD 1110052-0-00 23.000 0 1
    12 39W0181 2013/09/22  4205 USD 1110052-0-00 0.000 0 1
    13 39W0182 2013/09/22  3133 HKD 1110052-0-00 87.000 0 1
    14 39W0182 2013/09/22  3133 HKD 1110052-0-00 2323.000 2323 1
    15 39W0190 2013/09/30  3333 RMB 1110052-0-00 10.000 0 1
    16 39W0190 2013/09/30  3333 RMB 1110052-0-00 100.000 100 1
    17 39W0220 2013/09/30  3333 RMB 1110048-0-00 10.000 0 1
    18 39W0220 2013/09/30  3333 RMB 1110048-0-00 100.000 100 1
    你们看图片对应我下面的话
    原数据是26条 有相同的  其中有一列 附加金额区分(没显示出来)0:非附加金额  1:附加金额      使用你的Sql语句   是去掉了一些重复的数据    附加金额这一列会出现两个相同的     如果两个相同的数据 附加金额=0的那一列不显示 显示附加金额>0的这一列          还有就是   我要添加两列  一列 供应商(根据供应商编号查询) 一列 总金额(总金额=加工金额+附加金额)   这两列要怎么添加呢? 
      

  5.   

    1 39W0180 2013/09/27  3333 JPY 1110052-0-00 0 20.000 0
    2 39W0180 2013/09/27  3333 JPY 1110052-0-00 0 760.000 0
    3 39W0180 2013/09/27  3333 JPY 1110052-0-00 1 23.000 23
    4 39W0179 2013/09/27  3333 JPY 1110052-0-00 0 23.000 0
    5 39W0179 2013/09/27  3333 JPY 1110052-0-00 0 0.000 0
    6 39W0179 2013/09/27  3333 JPY 1110052-0-00 1 12.000 12
    7 39W0220 2013/09/30  3333 RMB 1110048-0-00 0 10.000 0
    8 39W0220 2013/09/30  3333 RMB 1110048-0-00 0 20.000 0
    9 39W0220 2013/09/30  3333 RMB 1110048-0-00 0 30.000 0
    10 39W0220 2013/09/30  3333 RMB 1110048-0-00 1 100.000 100
    11 39W0181 2013/09/22  4205 USD 1110052-0-00 0 23.000 0
    12 39W0181 2013/09/22  4205 USD 1110052-0-00 0 0.000 0
    13 39W0181 2013/09/22  4205 USD 1110052-0-00 1 0.000 0
    14 39W0182 2013/09/22  3133 HKD 1110052-0-00 0 87.000 0
    15 39W0182 2013/09/22  3133 HKD 1110052-0-00 0 22.000 0
    16 39W0182 2013/09/22  3133 HKD 1110052-0-00 1 2323.000 2323
    17 39W0138 2013/09/22  1111 RMB 1110052-0-00 0 32.000 0
    18 39W0138 2013/09/22  1111 RMB 1110052-0-00 0 23.000 0
    19 39W0159 2013/09/11  3333 RMB 1110052-0-00 0 324.000 0
    20 39W0159 2013/09/11  3333 RMB 1110052-0-00 0 36.000 0
    21 39W0159 2013/09/11  3333 RMB 1110052-0-00 1 0.000 0
    22 39W0190 2013/09/30  3333 RMB 1110052-0-00 0 10.000 0
    23 39W0190 2013/09/30  3333 RMB 1110052-0-00 0 20.000 0
    24 39W0190 2013/09/30  3333 RMB 1110052-0-00 1 100.000 100
    25 39W0147 2013/09/22  3333 RMB 1110052-0-00 0 0.000 0
    26 39W0147 2013/09/22  3333 RMB 1110052-0-00 0 11.000 0
    27 39W0139 2013/09/23  3333 JPY 1110052-0-00 0 239208.000 0
    28 39W0139 2013/09/23  3333 JPY 1110052-0-00 0 11.000 0
    29 39W0146 2013/09/22  3333 RMB 1110052-0-00 0 23.000 0
    30 39W0146 2013/09/22  3333 RMB 1110052-0-00 0 20.000 0过滤条件是  每条加工费单号  只显示一条   ,  如果相同编号的 附加金额都=0 就显示0  如果相同编号的 附加金额 里面有一条>0 就显示这 一条 ,  还要添加两列   一列叫 供应商  这一列对应 供应商编号  另一列叫   总金额(总金额是取加工费单号相同的(没显示出来的加工费编号相同的) 总金额= 加工金额+附加金额)
    大概就这些了      
      

  6.   

    大致就这类型 需要什么 改一下就可以了
    select 加工费单号, 供应商编号,总金额
    from 
    (
    select t.加工费单号, t.供应商编号,t.加工金额+t.附加金额 "总金额"
         row_number() over(partition by 加工费单号 order by 附加金额 desc) rn 
    from t

    where rn = 1;
      

  7.   

    这样不行        加工金额取的是  相同数据 加工金额 的总和    附加金额也一样    才能得出总金额  
    你的Sql语句    加个SUM就不行了    
      

  8.   

    你直接sum起来不就行了select t.加工费单号, t.供应商编号,sum(t.加工金额)+sum(t.附加金额) "总金额"
    from t
    )group by t.加工费单号, t.供应商编号
    ;如果还需要其他字段的值,就用这个结果再去连表查询就行了
      

  9.   

    csdn 这个版块不是讨论oracle dba 所遇到的问题的吗?
    怎么都是oracle开发的问题啊?
      

  10.   


    csdn 这个版块不是讨论oracle dba 所遇到的问题的吗?
    怎么都是oracle开发的问题啊?
      

  11.   


    这是基础板块 深奥一点的都是在高级技术区发帖 然后dba也很少发贴讨论什么 查资料最直接
      

  12.   


    这是基础板块 深奥一点的都是在高级技术区发帖 然后dba也很少发贴讨论什么 查资料最直接兄台知道有什么oracle dba讨论问题的论坛吗?感觉很少人探讨oracle dba 的问题的?