开发者社区 问答 正文

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实现这样的需求(如果不能,用什么辅助比较好),什么样的算法效率高(大量数据)?

展开
收起
a123456678 2016-07-01 11:51:55 2198 分享 版权
1 条回答
写回答
取消 提交回答
  • 一条SQL好像无法实现,需要分步处理
    1、对【地址】分组
    对 地址 字段用 group by 地址
    然后having 中 count(地址) > 1
    接着where 排除掉 业务号 is null 的记录

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

    2019-07-17 19:49:54
    赞同 展开评论
问答分类:
问答标签:
问答地址: