如字段A\B\C\D\E
A B C 字段有正常数据 D字段是布尔类型的,Y或N,E字段为空
例如原有表格数据
A      B      C        D           E
001   张三  90      Y          NULL
002   李四  99       Y         NULL
003   王五   98      N         NULL
004   赵六   91      Y          NULL现在实现效果是,第一次 
把E字段按顺序计数,条件是 D字段Y的
效果是:
001   张三  90      Y          1  
002   李四  99       Y         2
004   赵六   91      Y         3
第二次,003的数据D字段修改为Y
那么003的E字段自动增加为 4
效果是:
001   张三  90      Y          1  
002   李四  99       Y         2
004   赵六   91      Y         3
003   王五   98      N        4主要是请教最为简洁的SQL语句效果。在此谢谢各位大虾!

解决方案 »

  1.   


    --> 数据库版本:
    --> Microsoft SQL Server 2008 (RTM) - 10.0.1600.22
    --> 测试数据:[TB]
    IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[TB]') 
    AND type in (N'U')) 
    DROP TABLE [TB]
    GO---->建表
    create table [TB]([A] varchar(3),[B] varchar(4),[C] int,[D] varchar(1),[E] varchar(4))
    insert [TB]
    select '001','张三',90,'Y','NULL' union all
    select '002','李四',99,'Y','NULL' union all
    select '003','王五',98,'N','NULL' union all
    select '004','赵六',91,'Y','NULL'
    GO--> 查询结果
    ;with a as 
    (select ROW_NUMBER() over (order by case when D='Y' then 1 else 0 end desc,A) as px ,* from TB )update a
    set E=px
    SELECT * FROM [TB]--> 删除表格
    --DROP TABLE [TB]
      

  2.   

    create table [TB]([A] varchar(3),[B] varchar(4),[C] int,[D] varchar(1),[E] varchar(4))
    insert [TB]
    select '001','张三',90,'Y','NULL' union all
    select '002','李四',99,'Y','NULL' union all
    select '003','王五',98,'N','NULL' union all
    select '004','赵六',91,'Y','NULL'
    GOupdate tb set e = (select count(1) from tb where D > t.D or (D = t.D and (a < t.a))) + 1 from tb tselect * from tb
    /*
    A    B    C           D    E    
    ---- ---- ----------- ---- ---- 
    001  张三   90          Y    1
    002  李四   99          Y    2
    003  王五   98          N    4
    004  赵六   91          Y    3(所影响的行数为 4 行)
    */select * from tb order by e
    /*
    A    B    C           D    E    
    ---- ---- ----------- ---- ---- 
    001  张三   90          Y    1
    002  李四   99          Y    2
    004  赵六   91          Y    3
    003  王五   98          N    4(所影响的行数为 4 行)
    */drop table tb