首页 新闻 会员 周边 捐助

sql 去重复合并

0
悬赏园豆:40 [待解决问题]
1、NULL    B83D5B3E-36EB-4271-95DB-1A316EF843A4    001    上海    001    
2、NULL B83D5B3E-36EB-4271-95DB-1A316EF843A4 001 上海 002
3、NULL B83D5B3E-36EB-4271-95DB-1A316EF843A4 001 上海 003
4、64581950-840D-49F2-B3BD-825C514DBF7C B83D5B3E-36EB-4271-95DB-1A316EF843A4 001 上海 003

上面数据源 我想得到结果为  1  2  为各位一条 , 3  4合并为一条  最后结果为  1   2   4 

1NULL    B83D5B3E-36EB-4271-95DB-1A316EF843A4    001    上海    001    
2NULL    B83D5B3E-36EB-4271-95DB-1A316EF843A4    001    上海    002    
464581950-840D-49F2-B3BD-825C514DBF7C    B83D5B3E-36EB-4271-95DB-1A316EF843A4    001    上海    003   
MissJacker的主页 MissJacker | 初学一级 | 园豆:59
提问于:2013-05-03 09:50
< >
分享
所有回答(6)
0

请详细问题

胖子哥哥 | 园豆:341 (菜鸟二级) | 2013-05-03 10:03
0

1、sql语句貌似不好弄,得用存储过程+游标来写。

2、或则我们直接先查出来放到DataTable中,然后再排除重复的好了。(可以先按后面4个列进行排序)

滴答的雨 | 园豆:3660 (老鸟四级) | 2013-05-03 10:21
0

只看数据,分组 用group by 。

基于最后一列分组,1、2 最后一列是001、002 ,3、4最后一列是003。

但是你的情况好像不是单纯的分组,因为3.4合并.结果你是省略了3。所以还是补充一下问题吧

 

邢少 | 园豆:10926 (专家六级) | 2013-05-03 10:24

说错了,和最后一列没有关系,其实我是想如果几条数据后4列都一样,那则取第一列不为null的

支持(0) 反对(0) MissJacker | 园豆:59 (初学一级) | 2013-05-03 10:28

@MissJacker:

 将为MUll验证条件前置,意思是为Null的数据在分组前先抛弃,〔分组后为空的抛弃,还是为空的都抛弃?〕

支持(0) 反对(0) 邢少 | 园豆:10926 (专家六级) | 2013-05-03 10:37
0

这样做不好,如果出现这样的怎么办

5、64581950-840D-49F2-B3BD-825C514DBF7C    B83D5B3E-36EB-4271-95DB-1A316EF843A4    001    NULL    003

应该在根源解决问题,修改第3条数据,而不是添加第4条数据,可以根据条件修改数据,而不是添加一条基本重复的数据。

@@@一统@@@ | 园豆:1551 (小虾三级) | 2013-05-03 10:32

后面几列不会出现null的,我只是想过滤掉3这条数据。得到 1 2 4 组成的集合

支持(0) 反对(0) MissJacker | 园豆:59 (初学一级) | 2013-05-03 10:36
0

对第一列使用max函数。

对后三个列进行group by。

例如:

SELECT MAX(c1),c2,c3,c4
FROM table_name
GROUP BY c2,c3,c4;

Wolfe Yu | 园豆:434 (菜鸟二级) | 2013-05-06 15:08
0

WITH a AS ( SELECT NULL A ,
      'b83d' B ,
      '001' C ,
      '上海' D ,
      '001' E
      UNION ALL
      SELECT NULL ,
      'b83d' ,
      '001' ,
      '上海' ,
      '002'
      UNION ALL
      SELECT NULL ,
      'b83d' ,
      '001' ,
      '上海' ,
      '003'
      UNION ALL
      SELECT '5555' ,
      'b83d' ,
      '001' ,
      '上海' ,
      '003'
    ),
  B AS ( SELECT * ,
      ROW_NUMBER(  ) OVER ( PARTITION BY b, c, d, e ORDER BY b, c, d, e ) AS N
      FROM  A
    )
 SELECT *
 FROM b WHERE n =1

dearz | 园豆:588 (小虾三级) | 2013-11-01 17:55

你这个需求不够具体,要多给出一些数据才行,这样能解决你目前的问题

支持(0) 反对(0) dearz | 园豆:588 (小虾三级) | 2013-11-01 17:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册