不知道怎么精确描述问题,我把问题详细说一下:)
T1表中数据如下:
ID CardID Flag
---------------------------
1 100 1
2 100 1
3 100 0
4 100 1
5 100 1
6 100 1
7 100 0
8 101 1
9 101 1
10 101 1
11 101 0
-----------------------------
数据按照ID排序后,Flag字段有以下意义:
从1开始,到0为止,表示一个状态;从下一个1开始,到0结束,表示另一个状态。
现在要按照Flag表示的意义,按照状态对表进行分组:
declare @cnt int;
set @cnt = 1;
select ID, CardID, Flag,
case when Flag = 1 then @cnt
else @cnt
end as Group,
case when Flag = 0 then (select @cnt=@cnt+1) end --select @cnt=@cnt+1 这句有语法错误
from T1
select @cnt=@cnt+1 这句有语法错误,具体语法怎么处理,或者该怎么解决这个问题?多谢。
------解决方案--------------------
select *, (select min(id) from t1 where flag=0 and a.id<=id)
from t1 a
这样?
------解决方案--------------------
这么重要的信息应该加个字段 GroupID
-- 先设 Flag=0 记录的 GroupID
UPDATE T1
SET GroupID = (SELECT COUNT(TX.*)+1 FROM T1 TX WHERE TX.ID < T1.ID)
WHERE Flag = 0
-- 先设 Flag=1 记录的 GroupID 就从后面的 Flag=0 记录中来
UPDATE T1
SET GroupID = (SELECT MIN(GroupID) FROM T1 TX WHERE TX.Flag = 0 AND TX.ID > T1.ID)
AND Flag = 1
------解决方案--------------------
case when Flag = 0 then (select @cnt=@cnt+1) end --select @cnt=@cnt+1 这句有语法错误
then后面只能是常量表达式,你写成了赋值语句,如果从意思上说你只是想显示值@cnt加1的话
可以改成
case when Flag = 0 then (@cnt+1) end