刚才那个SQL 这次我讲详细点
UserID flowNum Type status
jay 1 a Y
jolin 2 a 2
jacket 3 a n
zhangsan 4 a 1
cyong 5 a n
jay 6 a n
zhangsan 1 b 2
cyong 2 b 1
jay 3 b 1
jolin 4 b n
jacket 5 b 1
cyong 6 b 1
jay 1 c n
cyong 2 c 1
zhangsan 3 c 1
jolin 4 c n
jacket 5 c 1
jolin 6 c n
这是一个简单的工作流程表,用户名,流程顺序,流程类型,操作状态(Y和2为已经操作,N和1为尚未操作)
当用户登录后,sql里有个where UserID =当前登录的ID
比如段落一中
jay 登录 他的状态为 Y,已经操作过,查不出任何东西,同理jolin状态为2 ,也查不出
很明显这时候流程走到了第3位了,故jacket 登录时
查出自己的信息
jacket 3 a n
如果这个时候是zhangsan 登录的话,虽然他的状态为未操作,可是在他的上一级jacket 还未完成工作操作,所以zhangsan登录 也查不出值
简单的说就是在status不为(Y和2)的情况下,找出flowNum 最小的那一行
及用户登录后 工作流程走到自己这一步 才显示出那一行
比如第二段中 只有cyong登录后 显示出自己的信息
查出
cyong 2 b 1
其他人登录后都查不出
第三段中 只有jay登录后 显示出自己的信息
jay 1 c n
其他人登录后都查不出
不知道这样讲 清楚没有.
[解决办法]
--========+++++++++++++++++++++++++++++++++++==========--======= 每天都在进步,却依然追不上地球的自传=========--======= By: zc_0101 At:2009-08-18 09:59:18=========--========++++++++++++++++++++++++++++++++++++=========--> 测试数据: Tif object_id('T') is not null drop table Tcreate table T (UserID varchar(8),flowNum int,Type varchar(1),status varchar(1))insert into Tselect 'jay',1,'a','Y' union allselect 'jolin',2,'a','2' union allselect 'jacket',3,'a','n' union allselect 'zhangsan',4,'a','1' union allselect 'cyong',5,'a','n' union allselect 'zhangsan',1,'b','2' union allselect 'cyong',2,'b','1' union allselect 'jay',3,'b','1' union allselect 'jolin',4,'b','n' union allselect 'jacket',5,'b','1' union allselect 'jay',1,'c','n' union allselect 'cyong',2,'c','1' union allselect 'zhangsan',3,'c','1' union allselect 'jolin',4,'c','n' union allselect 'jacket',5,'c','1' ----------------查询--------------自定义函数CREATE FUNCTION F_GET(@USERID VARCHAR(100),@TYPE VARCHAR(10)) RETURNS @TEMP TABLE( USERID VARCHAR(100) ,FLOWNUM INT,[TYPE] VARCHAR(10),STATUS CHAR(1) )ASBEGIN IF EXISTS (SELECT 1 FROM T WHERE USERID=@USERID AND STATUS IN ('Y','2') AND [TYPE]=@TYPE) RETURN ELSE BEGIN INSERT INTO @TEMP SELECT USERID,FLOWNUM,[TYPE],STATUS FROM ( SELECT *,ROW=ROW_NUMBER() OVER (ORDER BY FLOWNUM) FROM T WHERE [TYPE]=@TYPE AND STATUS IN('1','N') ) T WHERE T.ROW=1 AND T.USERID=@USERID END RETURNEND--正式查询--对于type='a'的情况SELECT * from dbo.F_GET('jay','a')SELECT * from dbo.F_GET('JOLIN','a')SELECT * from dbo.F_GET('jacket','a')/*USERID FLOWNUM TYPE STATUSjacket 3 a n*/SELECT * from dbo.F_GET('zhangsan','a')SELECT * from dbo.F_GET('CYONG','a')--对于type='b'的情况SELECT * from dbo.F_GET('zhangsan','B')SELECT * from dbo.F_GET('cyong','B')/*USERID FLOWNUM TYPE STATUScyong 2 b 1*/SELECT * from dbo.F_GET('jay','B')SELECT * from dbo.F_GET('jolin','B')SELECT * from dbo.F_GET('jacket','B')--对于type='c'的情况SELECT * from dbo.F_GET('jay','C')/*USERID FLOWNUM TYPE STATUSjay 1 c n*/SELECT * from dbo.F_GET('cyong','C')SELECT * from dbo.F_GET('zhangsan','C')SELECT * from dbo.F_GET('jolin','C')SELECT * from dbo.F_GET('jacket','C')--删除测试数据drop table Tdrop function F_get