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    nzhangsan  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 
其他人登录后都查不出
不知道这样讲 清楚没有.

解决方案 »

  1.   

    登录后输入一个参数@userid。
    可以通过@userid取出属于这个用户的各个type下未完成的流程。
    再取出各个type下的当前未处理流程的节点(即未处理的最小节点)。
    两者进行一下join,得出它是否是处于当前未处理的最小节点,然后进行显示即可。
    之前的一个帖子我已经回复过你,不知道你明白没有!
      

  2.   

    --========+++++++++++++++++++++++++++++++++++==========
    --======= 每天都在进步,却依然追不上地球的自传=========
    --======= By: zc_0101    At:2009-08-18 09:59:18=========
    --========++++++++++++++++++++++++++++++++++++=========
    --> 测试数据: T
    if object_id('T') is not null drop table T
    create table T (UserID varchar(8),flowNum int,Type varchar(1),status varchar(1))
    insert into T
    select 'jay',1,'a','Y' union all
    select 'jolin',2,'a','2' union all
    select 'jacket',3,'a','n' union all
    select 'zhangsan',4,'a','1' union all
    select 'cyong',5,'a','n' union all
    select 'zhangsan',1,'b','2' union all
    select 'cyong',2,'b','1' union all
    select 'jay',3,'b','1' union all
    select 'jolin',4,'b','n' union all
    select 'jacket',5,'b','1' union all
    select 'jay',1,'c','n' union all
    select 'cyong',2,'c','1' union all
    select 'zhangsan',3,'c','1' union all
    select 'jolin',4,'c','n' union all
    select '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)
        )
    AS
    BEGIN    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    
        RETURN
    END
    --正式查询--对于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 STATUS
    jacket 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 STATUS
    cyong 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 STATUS
    jay 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 T
    drop function F_get
     
      

  3.   


    IF OBJECT_ID('tb') IS NOT NULL
    DROP TABLE tb
    GO
    CREATE TABLE tb( UserID  varchar(10),flowNum  int ,Type varchar(10) , status varchar(10))
    go
    insert tb SELECT 
    'jay'   ,   1    ,'a' ,   'Y' UNION ALL SELECT 
    'jolin'   , 2    ,'a'  ,  '2' UNION ALL SELECT 
    'jacket' ,   3   , 'a'  ,  'n' UNION ALL SELECT 
    'zhangsan' , 4   , 'a'   , '1' UNION ALL SELECT 
    'cyong'    ,5    ,'a'    ,'n' UNION ALL SELECT 
    'zhangsan'  ,1   , 'b'    ,'2' UNION ALL SELECT 
    'cyong'  ,  2    ,'b'    ,'1' UNION ALL SELECT 
    'jay'   ,  3    ,'b'    ,'1' UNION ALL SELECT 
    'jolin'  ,  4    ,'b'   ,'n' UNION ALL SELECT 
    'jacket' ,   5    ,'b'   , '1' UNION ALL SELECT 'jay'     , 1    ,'c'    ,'n' UNION ALL SELECT 
    'cyong'   , 2    ,'c'    ,'1' UNION ALL SELECT 
    'zhangsan' , 3 ,   'c'   , '1' UNION ALL SELECT 
    'jolin'    ,4   , 'c'    ,'n' UNION ALL SELECT 
    'jacket'   , 5,    'c'   , '1' 
    go
    declare @user varchar(10)
    declare @type char(1)
    declare @id  intset @user='jacket'
    set @type='a'
    set @id=(select flowNum from tb where userID=@user and type=@type)

    select * from tb where userID=@user and type=@type 
    and @id=(select min(flowNum)as flowNum from tb 
    where status in('1','n') and type=@type)UserID     flowNum     Type       status
    ---------- ----------- ---------- ----------
    jacket     3           a          n(1 行受影响)