我有如下记录:
ID Name Sort Type
1 苹果 水果 NULL
2 香蕉 水果 NULL
3 雪莉 水果 NULL
4 橘子 水果 NULL
5 大众 汽车 NULL
6 噢迪 汽车 NULL
7 平冶 汽车 NULL
8 法拉利 汽车 NULL
9 老虎 野生动物 NULL
10 狼 野生动物 NULL
...........................
这样的记录N条。
我想实现每隔4条记录就将它们的TYPE改为为值(现在是NULL)
比如:
从水果系列开始ID1到4条改为1,
从ID5开始改为2,
从ID9开始改为3...
这里还有个要求就是,如如果汽车系列有9条记录,则多一条记录又不同类别的也算了个TYPE了。请教有没有SQL可以做到?
ID Name Sort Type
1 苹果 水果 NULL
2 香蕉 水果 NULL
3 雪莉 水果 NULL
4 橘子 水果 NULL
5 大众 汽车 NULL
6 噢迪 汽车 NULL
7 平冶 汽车 NULL
8 法拉利 汽车 NULL
9 老虎 野生动物 NULL
10 狼 野生动物 NULL
...........................
这样的记录N条。
我想实现每隔4条记录就将它们的TYPE改为为值(现在是NULL)
比如:
从水果系列开始ID1到4条改为1,
从ID5开始改为2,
从ID9开始改为3...
这里还有个要求就是,如如果汽车系列有9条记录,则多一条记录又不同类别的也算了个TYPE了。请教有没有SQL可以做到?
解决方案 »
- 求一个一对多关系的查询。
- 【【A表需要借助B表的条件简单sql语句疑问???】】
- 这样的查询语句该怎么写?
- 申明一个@Table ,可以不定义这个@Table的表结构,我把另一个表的结构和数据都传给这个@Table吗?
- 我是这样建立存储过程的,但是怎样提取存储过程的字段,以及怎样给里面的变量赋值???
- 如何筛选出A表中不在B表里的数据,并且把不在B表里的数据添加到A表中
- 关于sp_add_jobschedule 和 sp_addumpdevice 的问题!
- sqlserver装成window验证模式,如何写数据库连接文件?在线等待
- 网络+数据库编程中的遇到的大问题
- java程序的异常处理中大的异常可否放在小的异常前头?
- SQL数据库表结构问题
- 这个SQL查询应该怎么写?
set @i=1
update tb set type= case when id%4=0 then @i=@i+1 end
DECLARE tb CURSOR LOCAL
FOR
SELECT id FROM tb
DECLARE @col1_old varchar(10),@id int,@i int,@s varchar(100)
set @i=1
OPEN tb
FETCH tb INTO @id
WHILE @@FETCH_STATUS=0
BEGIN
IF @id%4=0
update tb set @i=@i+1,type=@i where id=@id
ELSE
update tb set type=@i
FETCH tb INTO @col1,@col2
END
CLOSE tb
DEALLOCATE tb
FOR
SELECT id FROM tb
DECLARE @col1_old varchar(10),@id int,@i int,@s varchar(100)
set @i=1
OPEN tb
FETCH tb INTO @id
WHILE @@FETCH_STATUS=0
BEGIN
IF @id%4=0
begin
update tb set type=@i where id=@id
set @i=@i+1
end
ELSE
update tb set type=@i
FETCH tb INTO @col1,@col2
END
CLOSE tb
DEALLOCATE tb
insert @ta select 1, '苹果', '水果', NULL
union all select 2, '香蕉', '水果', NULL
union all select 3, '雪莉', '水果', NULL
union all select 4, '橘子', '水果', NULL
union all select 5, '大众', '汽车', NULL
union all select 6, '噢迪', '汽车', NULL
union all select 7, '平冶', '汽车', NULL
union all select 8, '法拉利', '汽车', NULL
union all select 9, '老虎', '野生动物', NULL
union all select 10, '狼', '野生动物', NULLupdate @ta
set [type]='间隔4个'
where id%4=0select * from @ta(10 行受影响)(2 行受影响)
ID Name Sort Type
----------- ---------- ---------- ----------
1 苹果 水果 NULL
2 香蕉 水果 NULL
3 雪莉 水果 NULL
4 橘子 水果 间隔4个
5 大众 汽车 NULL
6 噢迪 汽车 NULL
7 平冶 汽车 NULL
8 法拉利 汽车 间隔4个
9 老虎 野生动物 NULL
10 狼 野生动物 NULL(10 行受影响)
(
id int,
[datetime] datetime
)
insert into tb1
select 1,'2007-03-03' union all
select 2,'2007-03-05' union all
select 3,'2007-03-08' union all
select 5,'2007-03-11' union all
select 7,'2007-03-16' union all
select 9,'2007-03-20' union all
select 11,'2007-04-26'
go
select identity(int,1,1) as iden,id,[datetime] into # from tb1
--执行
declare @n int
set @n=2
DECLARE tb CURSOR LOCAL
FOR
SELECT iden FROM #
DECLARE @iden int,@old_iden int
set @old_iden=0
OPEN tb
FETCH tb INTO @iden
WHILE @@FETCH_STATUS=0
BEGIN
IF @iden%@n=0
begin
select * from # where iden<=@iden and iden>@old_iden
set @old_iden=@iden
end
FETCH tb INTO @iden
END
select * from # where iden<=@iden and iden>@old_iden
CLOSE tb
DEALLOCATE tb
drop table #
drop table tb1
--结果
iden id datetime
----------- ----------- -----------------------
1 1 2007-03-03 00:00:00.000
2 2 2007-03-05 00:00:00.000(2 行受影响)iden id datetime
----------- ----------- -----------------------
3 3 2007-03-08 00:00:00.000
4 5 2007-03-11 00:00:00.000(2 行受影响)iden id datetime
----------- ----------- -----------------------
5 7 2007-03-16 00:00:00.000
6 9 2007-03-20 00:00:00.000(2 行受影响)iden id datetime
----------- ----------- -----------------------
7 11 2007-04-26 00:00:00.000(1 行受影响)