日期:2014-05-17  浏览次数:20575 次

想对农田字段进行编号,请前辈指点下sql语句?先感谢了!
想通过sql语句运算后如下表,对对一个村、同一个组、同一个农户的农田进行编号,编号规则就是在 农户姓名后加上1 2 3。


农户表  结构如下:

村名称 组名称 农户姓名 农田编号
天天村 第一组 张三
天天村 第一组 张三
天天村 第一组 张三
天天村 第一组 李四
天天村 第一组 李四
天天村 第一组 李四


想得到的结果:

村名称 组名称 农户姓名 农田编号
天天村 第一组 张三 张三1
天天村 第一组 张三 张三2
天天村 第一组 张三 张三3
天天村 第一组 李四 李四1
天天村 第一组 李四 李四2
天天村 第一组 李四 李四3

------解决方案--------------------
with 农田(村名称,组名称,农户姓名)
as(
select '天天村','第一组','张三'  union all
select '天天村','第一组','张三'  union all
select '天天村','第一组','张三'  union all
select '天天村','第一组','李四'  union all
select '天天村','第一组','李四'  union all
select '天天村','第一组','李四' ),
source as(
select *,rowindex=row_number()over(partition by 农户姓名 order by getdate()) from 农田
)
select 村名称,组名称,农户姓名,农户姓名+rtrim(rowindex) 农田编号 from source
------解决方案--------------------


if OBJECT_ID('table1','u') is not null
drop table table1
create table table1
(
村名称 nvarchar(20),
组名称 varchar(20),
农户名称 varchar(20),
农田编号 nvarchar(20)
)
go 
insert into table1
select '天天村','第一组','张三',null union all
select '天天村','第一组','张三',null union all
select '天天村','第一组','张三',null union all
select '天天村','第一组','李四',null union all
select '天天村','第一组','李四',null union all
select '每天村','第一组','王五',null union all
select '每天村','第一组','王五',null union all
select '天天村','第一组','李四',null

--SQL
select A.村名称,A.组名称,A.农户名称,A.农户名称+convert(nvarchar(20),isnull(A.RowID,'')) as 编号 from
(select *,row_number()over(partition by 村名称,组名称,农户名称 order by getdate()) RowID From table1) A
 
/*结果集
村名称  组名称    农户名称   编号
每天村 第一组   王五    王五1
每天村 第一组   王五     王五2
天天村 第一组   李四    李四1
天天村 第一组   李四    李四2
天天村 第一组   李四    李四3
天天村 第一组   张三    张三1
天天村 第一组   张三    张三2
天天村 第一组   张三    张三3
/*

------解决方案--------------------
if object_id('table1') is not null
drop table table1
go
create table table1 
(
村名称 nvarchar(20),
组名称 varchar(20),
农户名称 varchar(20),
农田编号 nvarchar(10)

insert into table1
select '天天村','第一组','张三',null union all
select '天天村','第一组','张三',null union all
select '天天村','第一组','张三',null union all
select '天天村','第一组','李四',null union all
select '天天村','第一组','李四',null union all
select '每天村','第一组','王五',null union all
select '每天村','第一组','王五',null union all
select '天天村','第一组','李四',null
select t.村名称,t.组名称,t.农户名称,
t.农户名称+convert(varchar(10),row_number() over(partition by t.村名称,t.组名称,t.农户名称 order by t.农田编号))  农田编号
from table1 as t