第二次开贴求助

tjma_2002 2007-03-12 09:50:12
表: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
...全文
191 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjma_2002 2007-03-12
  • 打赏
  • 举报
回复
自己搞定了,select lb,count(lb)as gs from mess as a where a.userid=2 and a.lb not in(select lb from mess where bz=0 and sx<a.sx and lb=a.lb) group by a.lb
tjma_2002 2007-03-12
  • 打赏
  • 举报
回复
select lb,count(lb)as gs from messsp as a where a.userid=5 and a.lb not in(select lb from messsp where bz=0 and sx<a.sx and messid=a.messid) group by a.lb
zejyu 2007-03-12
  • 打赏
  • 举报
回复
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


tjma_2002 2007-03-12
  • 打赏
  • 举报
回复
lb userid sx bz
1 1 1 1
1 2 2 0
如果数据库中是这么存的话,就应该搜索出一条来,如果换成下面的数据:
lb userid sx bz
1 1 1 0
1 2 2 0

就没有一条符合的,因为同一个事件,第一个人还没有审核,所以userid=2的人就不应该看到
tjma_2002 2007-03-12
  • 打赏
  • 举报
回复
select lb,count(lb)as gs from mess where userid=2 and bz=0 and(这里需要一个条件来判断该事件是否轮到该人处理,也就是sx大于该条数据的sx的事件的bz是否为1) group by lb
tjma_2002 2007-03-12
  • 打赏
  • 举报
回复
lb是用来标记事件的,userid是用来标记应该谁来审批的,sx是来标记审批顺序的,bz这个是标记是否审批过的,现在查查询出来的结果是,userid=2的这个人,所应该审批的事件,有个前提就是如果这个事件现在还没有轮到userid=2的这个人,是不能搜索出来的
leo_lesley 2007-03-12
  • 打赏
  • 举报
回复
看的有点晕
yahuu 2007-03-12
  • 打赏
  • 举报
回复
userid=2的bz=0的并且sx字段中大于userid=2的sx的值的bz=1才行
这句直接把我搞傻了
joy_jiangyan 2007-03-12
  • 打赏
  • 举报
回复
给的分太少了,没吸引里啊

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧