我有如下记录:
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可以做到?

解决方案 »

  1.   

    update table 1 set type=(id/4)+1
      

  2.   

    update tbset type=ceiling(id*1.00/4)
      

  3.   

    update tb set type=ceiling(id*1.00/4.0001)
      

  4.   

    declare @i int 
    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
      

  5.   

    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
                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
      

  6.   

    declare @ta table (ID int, [Name] varchar(10),  Sort varchar(10),  [Type] varchar(10))
    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 行受影响)
      

  7.   

    create table tb1
    (
    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 行受影响)