zoukankan      html  css  js  c++  java
  • SQLServer 表连接时使用top 1 去除重复数据

    left join SM_SOLine soline on soline.SO=so.ID and soline.DocLineNo=(select MAX(DocLineNo) from SM_SOLine where so=so.ID)

    create table #test8
    (
      id int,
      name varchar(50)
    )

    drop table #test9
    create table #test9
    (
      id int,
      name varchar(50)
    )

    insert into #test8
    select 1,'aaa' union all
    select 2,'bbb' union all
    select 3,'ccc' union all
    select 4,'ddd' 


    insert into #test9
    select 3,'abc' union all
    select 3,'ddd' union all
    select 3,'eee' union all
    select 3,'eee' union all
    select 2,'ccc' union all
    select 1,'ghd' union all
    select 7,'hgd' 

    select A.id,A.name,B.name from #test8 A
    inner join #test9 B on A.ID=B.ID
    where not exists(select 1 from #test9 where id=B.id and name>B.name)

    此处B表的Name字段必须是在B表中不重复的某字段,不然,会出现重复结果

    use TestDB
    drop table test8
    create table test8
    (
          id int,
          name1 varchar(50),
          name2 varchar(50),
          name3 varchar(50)
    )

    drop table test9
    create table test9
    (
          id int,
          name1 varchar(50),
          name2 varchar(50),
          name3 varchar(50)

    )

    insert into test8 --ItemMaster
    select  1,'a','aaa','111' union all
    select  2,'b','bbb','222' union all
    select  3,'c','ccc','333' union all
    select  4,'d','ddd','444' union all
    select  5,'e','eee','555' union all
    select  6,'f','fff','666' union all
    select  7,'g','ggg','777' union all
    select  8,'h','hhh','888'

    insert into test9 --Gprice
    select  1,'a','aaa','567' union all
    select  2,'a','aaa','567' union all
    select  3,'i','ccc','641' union all
    select  4,'c','ccc','981' union all
    select  5,'e','eee','126' union all
    select  6,'f','fff','873' union all
    select  7,'c','ccc','946' union all
    select  8,'h','ddd','767'


    --insert into test9 --Gprice
    --select  1,'a','aaa','A' union all
    --select  2,'a','aaa','A' union all
    --select  3,'i','ccc','B' union all
    --select  4,'c','ccc','C' union all
    --select  5,'e','eee','D' union all
    --select  6,'f','fff','E' union all
    --select  7,'c','ccc','F' union all
    --select  8,'h','ddd','G'

    /*
      1,a  --
      3,c  --
      5,e
      6,f
    */

    此写法会导致test8中的ID重复

    select A.id,A.name1,A.name3,B.name2,B.name3 B_name3 from test8 A
    inner join test9 B on A.name1=B.name1 and A.name2=B.name2

     使用此方法可以解决问题:

    select A.id,A.name1,A.name3,B.name2,MAX(B.name3) B_name3  
    from test8 A
    inner join test9 B on A.name1=B.name1 and A.name2=B.name2
    where not exists(select 1 from test9 where id=B.id and name3>B.name3)
    group by A.id,A.name1,A.name3,B.name2

    PS. B表里的name3可以是test8表里的除关键字段以外任意一个前提是有值的字段,

          可以是整型,也可是字符串,都可显示正常,如下列结果


     

  • 相关阅读:
    检测ip是否ping通和ssh端口是否通
    python从excel取值
    后k8s时代-微服务
    nginx 笔记-01
    Linux中后台执行的方法nohup和screen
    为什么要自定义Java类加载器
    Synchronized实现原理
    一个线程两次或者多次调用start()方法会怎么样
    Java里锁的种类的总结
    Spring事务控制(PROPAGATION_NESTED)
  • 原文地址:https://www.cnblogs.com/xcxcxcxc/p/5541200.html
Copyright © 2011-2022 走看看