日期:2014-05-19  浏览次数:20549 次

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