日期:2014-05-18  浏览次数:20746 次

第二次开贴求助
表:mess
字段有:
lb     userid       sx         bz
1       1                 1           1
1       2                 2           0
1       3                 3           0
2       1                 1           0
2       3                 2           0
3       2                 1           1
3       1                 2           0

我现在想从这些数据里面得到的结果是:userid=2的bz=0的并且sx字段中大于userid=2的sx的值的bz=1才行,也许我说的不够明白,是这样的,这个是用于审批流程的,我想找出某个人需要审批的事项ID来,但这个审批是有先后顺序的,如果这个人前面的人还没有审批,那么这个人就看不到这个事项。字段bz就是用来标志是否审批过该事项

第一次开贴没有人回答
http://community.csdn.net/Expert/topic/5389/5389002.xml?temp=1.424807E-02

------解决方案--------------------
看的有点晕
------解决方案--------------------
1、创建临时表
create table #T (lb varchar(8),userid varchar(8),sx int,bz int)

2、输入数据
insert into #t(lb,userid,sx,bz)
select 1,1,1,1 union
select 1,2,2,0 union
select 1,3,3,0 union
select 2,1,1,0 union
select 2,3,2,0 union
select 3,2,1,1 union
select 3,1,2,0 union
select 4,2,1,0 union
select 4,1,2,0 union
select 4,3,3,0

3、UserID=2 有参考加的事项有
select * from #T where userid=2

lb userid sx bz
-------- -------- ----------- -----------
1 2 2 0
3 2 1 1
4 2 1 0

从结果中可以看到事项3用户已经办理,未办理的有1和4 ,并且不知道事项1和4是否上级已经办理,这并不是我们所要的结果

4、UserID=2 到办未办的事项可通过以下查询得到结果

select T1.*
from #T T1
left join #T T2 on T1.lb=T2.lb and T2.sx=T1.sx-1
where T1.userid=2 and T1.bz=0 and (t2.bz=1 or t2.bz is null)

lb userid sx bz
-------- -------- ----------- -----------
1 2 2 0
4 2 1 0



------解决方案--------------------
给的分太少了,没吸引里啊

------解决方案--------------------
userid=2的bz=0的并且sx字段中大于userid=2的sx的值的bz=1才行
这句直接把我搞傻了