如字段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语句效果。在此谢谢各位大虾!
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语句效果。在此谢谢各位大虾!
--> 数据库版本:
--> 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]
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