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
1、NULL B83D5B3E-36EB-4271-95DB-1A316EF843A4 001 上海 001 2、NULL B83D5B3E-36EB-4271-95DB-1A316EF843A4 001 上海 002 4、64581950-840D-49F2-B3BD-825C514DBF7C B83D5B3E-36EB-4271-95DB-1A316EF843A4 001 上海 003
请详细问题
1、sql语句貌似不好弄,得用存储过程+游标来写。
2、或则我们直接先查出来放到DataTable中,然后再排除重复的好了。(可以先按后面4个列进行排序)
只看数据,分组 用group by 。
基于最后一列分组,1、2 最后一列是001、002 ,3、4最后一列是003。
但是你的情况好像不是单纯的分组,因为3.4合并.结果你是省略了3。所以还是补充一下问题吧
说错了,和最后一列没有关系,其实我是想如果几条数据后4列都一样,那则取第一列不为null的
@MissJacker:
将为MUll验证条件前置,意思是为Null的数据在分组前先抛弃,〔分组后为空的抛弃,还是为空的都抛弃?〕
这样做不好,如果出现这样的怎么办
5、64581950-840D-49F2-B3BD-825C514DBF7C B83D5B3E-36EB-4271-95DB-1A316EF843A4 001 NULL 003
应该在根源解决问题,修改第3条数据,而不是添加第4条数据,可以根据条件修改数据,而不是添加一条基本重复的数据。
后面几列不会出现null的,我只是想过滤掉3这条数据。得到 1 2 4 组成的集合
对第一列使用max函数。
对后三个列进行group by。
例如:
SELECT MAX(c1),c2,c3,c4
FROM table_name
GROUP BY c2,c3,c4;
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
你这个需求不够具体,要多给出一些数据才行,这样能解决你目前的问题