当前位置: 代码迷 >> Sql Server >> select语句根据字段进展不同操作
  详细解决方案

select语句根据字段进展不同操作

热度:11   发布时间:2016-04-24 10:17:39.0
select语句根据字段进行不同操作
不知道怎么精确描述问题,我把问题详细说一下:)
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

------解决方案--------------------
引用
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

 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   
  相关解决方案