表a
id   count   role    isTJ
----------------------------
1    32      AAA     0  
2    23      AAA     0  
4    89      BBB     0  
5    21      BBB     0  
6    43      BBB     0  
7    56      BBB     0  
8    77      BBB     0  把每个角色(role)中COUNT值最大的前三项的isTJ=1最后结果
表a
id   count   role    isTJ
----------------------------
1    32      AAA     1  
2    23      AAA     1  
4    89      BBB     1  
5    21      BBB     0  
6    43      BBB     0  
7    56      BBB     1  
8    77      BBB     1  
更新SQL怎么写

解决方案 »

  1.   

    UPDATE T  SET ISTJ=1  
    FROM A T WHERE [count]
    IN(SELECT TOP 3 [count] FROM A WHERE [ROLE]=T.[ROLE] ORDER BY [COUNT] DESC)
      

  2.   

    ----------------------------------------------------------------
    -- Author  :SQL77(只为思齐老)
    -- Date    :2010-01-26 15:52:49
    -- Version:
    --      Microsoft SQL Server  2000 - 8.00.194 (Intel X86) 
    -- Aug  6 2000 00:57:48 
    -- Copyright (c) 1988-2000 Microsoft Corporation
    -- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:#TB
    if object_id('tempdb.dbo.#TB') is not null drop table #TB
    go 
    create table #TB([id] int,[count] int,[role] varchar(3),[isTJ] int)
    insert #TB
    select 1,32,'AAA',0 union all
    select 2,23,'AAA',0 union all
    select 4,89,'BBB',0 union all
    select 5,21,'BBB',0 union all
    select 6,43,'BBB',0 union all
    select 7,56,'BBB',0 union all
    select 8,77,'BBB',0
    --------------开始查询--------------------------
    UPDATE T  SET ISTJ=1  
    FROM #TB T WHERE [count]
    IN(SELECT TOP 3 [count] FROM #TB WHERE [ROLE]=T.[ROLE] ORDER BY [COUNT] DESC)select * from #TB
    ----------------结果----------------------------
    /* (所影响的行数为 7 行)
    (所影响的行数为 5 行)id          count       role isTJ        
    ----------- ----------- ---- ----------- 
    1           32          AAA  1
    2           23          AAA  1
    4           89          BBB  1
    5           21          BBB  0
    6           43          BBB  0
    7           56          BBB  1
    8           77          BBB  1(所影响的行数为 7 行)
    */
      

  3.   

    UPDATE T  SET ISTJ=1  
    FROM A T WHERE [count]
    IN(SELECT TOP 3 [count] FROM A WHERE [ROLE]=T.[ROLE] ORDER BY [COUNT] DESC)up
      

  4.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(我是小F,向高手学习)
    -- Date    :2010-01-26 15:51:33
    -- 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)
    --
    ----------------------------------------------------------------
    --> 测试数据:[a]
    if object_id('[a]') is not null drop table [a]
    go 
    create table [a]([id] int,[count] int,[role] varchar(3),[isTJ] int)
    insert [a]
    select 1,32,'AAA',0 union all
    select 2,23,'AAA',0 union all
    select 4,89,'BBB',0 union all
    select 5,21,'BBB',0 union all
    select 6,43,'BBB',0 union all
    select 7,56,'BBB',0 union all
    select 8,77,'BBB',0
    --------------开始查询--------------------------
    update 
      t
    set
      isTJ=1
    from
      a t
    where
      [count] IN(SELECT TOP 3 [count] FROM a WHERE [role]=T.[role] ORDER BY [count] DESC)
    select * from a
    ----------------结果----------------------------
    /* id          count       role isTJ
    ----------- ----------- ---- -----------
    1           32          AAA  1
    2           23          AAA  1
    4           89          BBB  1
    5           21          BBB  0
    6           43          BBB  0
    7           56          BBB  1
    8           77          BBB  1(7 行受影响)
    */