SQL筛选数据问题


有下面这样一个表


 姓名    业务号       号码    地址    类型    标识
赵一    NULL      123456    地址1   0       NULL
李二    2         123456    地址1   1       A
张叁    NULL      123456    地址1   1       NULL
李肆    43        123456    地址2   0       B
王五    NULL      123456    地址2   0       NULL
刘六    NULL      123456    地址2   0       NULL
康七    NULL      123456    地址2   0       NULL
杨八    NULL      123456    地址2   1       NULL

需要实现下面的要求

  • 效果1:将相同地址的筛选出来
  • 效果2:同一地址的业务号填充为相同数值(比如原来李二业务号是2,那么和他同地址的赵一和张叁业务号都填充为2)
  • 效果3:同一地址的标识填充为相同数值
  • 效果4:但是上面2条规则对类型为1的不适用(他们既不用其他人的数据填充自己的NULL,用不用自己的数据填充别人的NULL)

result1


 姓名    业务号       号码    地址    类型    标识
赵一      NULL    123456    地址1   0       NULL
李二      2       123456    地址1   1       A
张叁      NULL    123456    地址1   1       NULL

result2


 李肆    43        123456    地址2   0       B
王五    43        123456    地址2   0       B
刘六    43        123456    地址2   0       B
康七    43        123456    地址2   0       B
杨八    NULL      123456    地址2   1       NULL


能不能只用SQL实现这样的需求(如果不能,用什么辅助比较好),什么样的算法效率高(大量数据)?

sql

超威包大人 9 years, 8 months ago

一条SQL好像无法实现,需要分步处理
1、对【地址】分组
对 地址 字段用 group by 地址
然后having 中 count(地址) > 1
接着where 排除掉 业务号 is null 的记录

2、对第一步取出的数据,输出到一个缓存表,主键为 地址,字段2为 业务号
然后用【地址】字段对主表与缓存表建立关联,更新主表的 业务号 is null的字段

兵库北女神 answered 9 years, 8 months ago

Your Answer