首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求一SQL語句.解决思路

2012-01-26 
求一SQL語句.表t:noflag1Y2N3N4Y5N6Y...如何得到下列結果(從flag為 Y 到下一條為 Y 之前的紀錄分組):11213

求一SQL語句.
表t:
no     flag
1       Y
2       N
3       N
4       Y
5       N
6       Y
...
如何得到下列結果(從flag為 'Y '到下一條為 'Y '之前的紀錄分組):
1       1
2       1
3       1
4       2
5       2
6       3
...

[解决办法]
update a
set
flag=(select count(1) from t where no <=a.no and flag= 'Y ')
from
t a
[解决办法]
参阅这个.

表A记录:

1 开门
2 开门
3 关门
4 开门
5 开门
6 关门

请教是否能查询出改变量,即只过滤出改变过值的相邻记录。结果应如下:
1 开门
3 关门
4 开门
6 关门

-- 测试数据
DECLARE @t TABLE(
id int, value varchar(10))
INSERT @t SELECT 1, N '开门 '
UNION ALL SELECT 2, N '开门 '
UNION ALL SELECT 3, N '关门 '
UNION ALL SELECT 4, N '开门 '
UNION ALL SELECT 5, N '开门 '
UNION ALL SELECT 6, N '关门 '

-- 查询
SELECT *
FROM @t A
WHERE value <> ISNULL((
SELECT TOP 1 value FROM @t
WHERE id < A.id
ORDER BY id DESC), A.value + 'a ')

-- 结果:
id value
----------- ----------
1 开门
3 关门
4 开门
6 关门

(4 行受影响)

[解决办法]
update tablename
set
flag=(select count(1) from tablename where no <=tablename.no and flag= 'Y ')

热点排行