控制号  条形码   分配地址
1      123456 
1      123457 
1      156487      
2      352548 
2      212336 
2      254848 
2      547854 现在想把控制号一样的最小的那个条形码的分配地址改为'样本'
请问怎么改呀

解决方案 »

  1.   

    update 
      tb 
    set
      分配地址='样本'
    from
      tb t
    where
      条形码=(select min(条形码) from tb where 控制号=t.控制号)
      

  2.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(我是小F,向高手学习)
    -- Date    :2009-11-30 09:30:28
    -- Version:
    --      Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
    -- Nov 24 2008 13:01:59 
    -- Copyright (c) 1988-2005 Microsoft Corporation
    -- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([控制号] int,[条形码] int,[分配地址] sql_variant)
    insert [tb]
    select 1,123456,null union all
    select 1,123457,null union all
    select 1,156487,null union all
    select 2,352548,null union all
    select 2,212336,null union all
    select 2,254848,null union all
    select 2,547854,null
    --------------开始查询--------------------------
    update 
      tb 
    set
      分配地址='样本'
    from
      tb t
    where
      条形码=(select min(条形码) from tb where 控制号=t.控制号)
    select * from [tb]
    ----------------结果----------------------------
    /* 控制号         条形码         分配地址
    ----------- ----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    1           123456      样本
    1           123457      NULL
    1           156487      NULL
    2           352548      NULL
    2           212336      样本
    2           254848      NULL
    2           547854      NULL(7 行受影响)*/
      

  3.   

    --> 测试数据: @tb
    declare @tb table (控制号 int,条形码 int,分配地址 varchar(10))
    insert into @tb
    select 1,123456,null union all
    select 1,123457,null union all
    select 1,156487,null union all
    select 2,352548,null union all
    select 2,212336,null union all
    select 2,254848,null union all
    select 2,547854,nullupdate @tb
    set 分配地址= case when 条形码=(select min(条形码) from @tb where 控制号=t.控制号) then '样本' else null end
    from @tb tselect * from @tb控制号         条形码         分配地址
    ----------- ----------- ----------
    1           123456      样本
    1           123457      NULL
    1           156487      NULL
    2           352548      NULL
    2           212336      样本
    2           254848      NULL
    2           547854      NULL(7 行受影响)
      

  4.   

    --> Title  : Generating test data [tb]
    --> Author :
    --> Date   : 2009-11-30 09:30:14
    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb] (控制号 int,条形码 int,分配地址 nvarchar(10))
    insert into [tb]
    select 1,123456,null union all
    select 1,123457,null union all
    select 1,156487,null union all
    select 2,352548,null union all
    select 2,212336,null union all
    select 2,254848,null union all
    select 2,547854,null
    update t set 分配地址=N'樣本'
    from tb t 
    where not exists(select 1 from tb where 控制号=t.控制号 and 条形码<t.条形码)
    select * from tb
    /*
    控制号         条形码         分配地址
    ----------- ----------- ----------
    1           123456      樣本
    1           123457      NULL
    1           156487      NULL
    2           352548      NULL
    2           212336      樣本
    2           254848      NULL
    2           547854      NULL(7 個資料列受到影響)
    */
      

  5.   

    --> Title  : Generating test data [tb]
    --> Author : 各位大大,小女子只想要顆星星
    --> Date   : 2009-11-30 09:44:12
    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb] (控制号 int,条形码 int,分配地址 sql_variant)
    insert into [tb]
    select 1,123456,null union all
    select 1,123457,null union all
    select 1,156487,null union all
    select 2,352548,null union all
    select 2,212336,null union all
    select 2,254848,null union all
    select 2,547854,null
    update t set 分配地址=N'樣本'
    from tb t 
    where not exists(select 1 from tb where 控制号=t.控制号 and 条形码<t.条形码)
    select * from tb
    /*
    控制号         条形码         分配地址
    ----------- ----------- ----------
    1           123456      樣本
    1           123457      NULL
    1           156487      NULL
    2           352548      NULL
    2           212336      樣本
    2           254848      NULL
    2           547854      NULL(7 個資料列受到影響)
    */