求一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 ')