户主 成员 身份证号 家庭地址 家庭排序
潘曰云 潘曰云 372802193412295710 东港区陈疃镇南鲍疃村 NULL
潘曰云 李曰申 372802193202095729 东港区陈疃镇南鲍疃村 NULL
潘明建 潘明建 372802196911145753 东港区陈疃镇南鲍疃村 NULL
潘明建 张传花 372802197102196520 东港区陈疃镇南鲍疃村 NULL
潘明建 潘文胜 371102199608265714 东港区陈疃镇南鲍疃村 NULL
潘明建 潘俊驰 371102201003105726 东港区陈疃镇南鲍疃村 NULL
。
。
。
。
户主 成员 身份证号 家庭地址 家庭排序
潘曰云 潘曰云 372802193412295710 东港区陈疃镇南鲍疃村 1
潘曰云 李曰申 372802193202095729 东港区陈疃镇南鲍疃村 2
潘明建 潘明建 372802196911145753 东港区陈疃镇南鲍疃村 1
潘明建 张传花 372802197102196520 东港区陈疃镇南鲍疃村 2
潘明建 潘文胜 371102199608265714 东港区陈疃镇南鲍疃村 3
潘明建 潘俊驰 371102201003105726 东港区陈疃镇南鲍疃村 4
如果成员和户主的姓名相同,家庭排序是1,其他再排序
------解决方案--------------------
- SQL code
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)goselect 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 tbdrop table tb , tmp
------解决方案--------------------
- SQL code
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 aset a.家庭排序 = b.rnfrom tb a join cte b on a.身份证号 = b.身份证号select * from tbdrop table tb/***************************户主 成员 身份证号 家庭地址 家庭排序---------- ---------- ------------------ -------------------------------------------------- -----------潘曰云 潘曰云 372802193412295710 东港区陈疃镇南鲍疃村 1潘曰云 李曰申 372802193202095729 东港区陈疃镇南鲍疃村 2潘明建 潘明建 372802196911145753 东港区陈疃镇南鲍疃村 1潘明建 张传花 372802197102196520 东港区陈疃镇南鲍疃村 2潘明建 潘文胜 371102199608265714 东港区陈疃镇南鲍疃村 3潘明建 潘俊驰 371102201003105726 东港区陈疃镇南鲍疃村 4(6 行受影响)
------解决方案--------------------
也可以采用如下方法:
1.户主 = 成员 则家庭排序=1
2.户主 = 成员 则按照身份证号码从小到大排序.
- SQL code
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)goupdate tb set 家庭排序 = 1 where 户主 = 成员update tb set 家庭排序 = (select count(1) from tb where 户主 <> 成员 and 户主 = t.户主 and 身份证号 < t.身份证号) + 2 from tb t where 户主 <> 成员select * from tbdrop table tb/*户主 成员 身份证号 家庭地址 家庭排序 ---------- ---------- ------------------ -------------------------------------------------- ----------- 潘曰云 潘曰云 372802193412295710 东港区陈疃镇南鲍疃村 1潘曰云 李曰申 372802193202095729 东港区陈疃镇南鲍疃村 2潘明建 潘明建 372802196911145753 东港区陈疃镇南鲍疃村 1潘明建 张传花 372802197102196520 东港区陈疃镇南鲍疃村 4潘明建 潘文胜 371102199608265714 东港区陈疃镇南鲍疃村 2潘明建 潘俊驰 371102201003105726 东港区陈疃镇南鲍疃村 3(所影响的行数为 6 行)*/