日期:2014-05-18 浏览次数:20757 次
create table tb(户主 varchar(10),成员 varchar(10),身份证号 varchar(18),家庭地址 varchar(50),家庭排序 int) insert into tb values('潘曰云', '潘曰云', '372802193412295710', '东港区陈疃镇南鲍疃村', NULL) insert into tb values('潘曰云', '李曰申', '372802193202095729', '东港区陈疃镇南鲍疃村', NULL) insert into tb values('潘明建', '潘明建', '372802196911145753', '东港区陈疃镇南鲍疃村', NULL) insert into tb values('潘明建', '张传花', '372802197102196520', '东港区陈疃镇南鲍疃村', NULL) insert into tb values('潘明建', '潘文胜', '371102199608265714', '东港区陈疃镇南鲍疃村', NULL) insert into tb values('潘明建', '潘俊驰', '371102201003105726', '东港区陈疃镇南鲍疃村', NULL) go select id = identity(int,1,1) , * into tmp from tb order by 户主,(case when 户主=成员 then 0 else 1 end) update tb set 家庭排序 = (select count(1) from tmp where 户主 = t.户主 and id < t.id) + 1 from tb , tmp t where tb.身份证号 = t.身份证号 select * from tb drop table tb , tmp
------解决方案--------------------
create table tb(户主 varchar(10),成员 varchar(10),身份证号 varchar(18),家庭地址 varchar(50),家庭排序 int) insert into tb values('潘曰云', '潘曰云', '372802193412295710', '东港区陈疃镇南鲍疃村', NULL) insert into tb values('潘曰云', '李曰申', '372802193202095729', '东港区陈疃镇南鲍疃村', NULL) insert into tb values('潘明建', '潘明建', '372802196911145753', '东港区陈疃镇南鲍疃村', NULL) insert into tb values('潘明建', '张传花', '372802197102196520', '东港区陈疃镇南鲍疃村', NULL) insert into tb values('潘明建', '潘文胜', '371102199608265714', '东港区陈疃镇南鲍疃村', NULL) insert into tb values('潘明建', '潘俊驰', '371102201003105726', '东港区陈疃镇南鲍疃村', NULL) go ;with cte as ( select *,rn=row_number() over (partition by 户主 order by 户主,(case when 户主=成员 then 0 else 1 end)) from tb ) update a set a.家庭排序 = b.rn from tb a join cte b on a.身份证号 = b.身份证号 select * from tb drop table tb /*************************** 户主 成员 身份证号 家庭地址 家庭排序 ---------- ---------- ------------------ -------------------------------------------------- ----------- 潘曰云 潘曰云 372802193412295710 东港区陈疃镇南鲍疃村 1 潘曰云 李曰申 372802193202095729 东港区陈疃镇南鲍疃村 2 潘明建 潘明建 372802196911145753 东港区陈疃镇南鲍疃村 1 潘明建 张传花 372802197102196520 东港区陈疃镇南鲍疃村 2 潘明建 潘文胜 371102199608265714 东港区陈疃镇南鲍疃村 3 潘明建 潘俊驰 371102201003105726 东港区陈疃镇南鲍疃村 4 (6 行受影响)
------解决方案--------------------
也可以采用如下方法:
1.户主 = 成员 则家庭排序=1
2.户主 = 成员 则按照身份证号码从小到大排序.
create table tb(户主 varchar(10),成员 varchar(10),身份证号 varchar(18),家庭地址 varchar(50),家庭排序 int) insert into tb values('潘曰云', '潘曰云', '372802193412295710', '东港区陈疃镇南鲍疃村', NULL) insert into tb values('潘曰云', '李曰申', '372802193202095729', '东港区陈疃镇南鲍疃村', NULL) insert into tb values('潘明建', '潘明建', '372802196911145753', '东港区陈疃镇南鲍疃村', NULL) insert into tb values('潘明建', '张传花', '372802197102196520', '东港区陈疃镇南鲍疃村', NULL) insert into tb values('潘明建', '潘文胜', '3711021