UserID flowNum Type status
jay       1     a     Y
jolin     2     a     2
jacket    3     a     n
zhangsan  4     a     1
cyong     5     a     n
zhangsan  1     a     2
cyong     2     a     1
jay       3     a     1
jolin     4     a     n
jacket    5     a     1jay       1     a     n
cyong     2     a     1
zhangsan  3     a     1
jolin     4     a     n
jacket    5     a     1status 状态为Y,N,1,2, 根据一个根据工作流程进行操作即flowNum  ,status=Y或者2 为已经操作完毕的两种状态,n,1为未进行操作的两种状态如上面的第一段数据显示,当 jacket登陆系统时 SQL查出当前流程里,1-5中只剩下3-5未进行操作,且3为最小,则
查出
jacket    3     a     n当然,这个时候如果是zhangsan 登陆 则查不出任何结果,除非jacket操作过后 其status变为y或者是2同理在第二段数据中 zhangsan  登陆后,因为已经操作完毕status为2,查看不到结果,
仅有cyong 时能查看到
cyong     2     a     1

解决方案 »

  1.   

    UserID flowNum Type status 
    jay      1      a    Y 
    jolin    2      a    2 
    jacket   3      a    n 
    zhangsan 4      a    1 
    cyong    5      a    n 
    zhangsan  1     b    2 
    cyong     2     b    1 
    jay       3     b    1 
    jolin     4     b    n 
    jacket    5     b    1 jay      1      c    n 
    cyong    2      c    1 
    zhangsan 3      c    1 
    jolin    4      c    n 
    jacket   5      c    1 
    type 有不同种,不同种的Type 有不同的flownum
    上面的表写错
      

  2.   

    SELECT UserID, flowNum ,Type INTO #TT FROM TB WHERE status='N' OR status ='1'SELECT * FROM #TT T WHERE NOT EXISTS(SELECT 1 FROM #TT T1 WHERE T.UserID=T1.UserID AND T1.flowNum <T.flowNum )???
    不太懂楼主的意思
      

  3.   

    晕,回4楼,我很久没上CSDN了.
    我要的结果就是以某个用户ID登录时,如果工作流轮到这个用户时,查出这一行
    比如第一段的 jacket  登录时 ,他前面两个人已经操作过了,故status不为n或者是1了
    选择工作流走到第3步了,所以当jacket登录后 会查出
    jacket  3      a    n 
    比如如果是cyong登录的话 查出的结果是
    cyong    2    b    1 我就想要这一条查询语句
    select..........where UserID =XX....
      

  4.   

    还是不明白!
    如果是cyong登录的话,结果为什么不是这个?
    cyong    5      a    n 
      

  5.   

    -- =========================================
    -- -----------t_mac 小编-------------------
       --------------------希望有天成为大虾---- 
    -- =========================================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),@type char(1)
    set @user='zhangsan'
    set @type='b'
    select * from tb 
    where   Type=@type and 
    flowNum=(
    select MIN(flowNum) as flowNum
    from tb 
    where flowNum>=(select flowNum from tb where UserID=@user and Type=@type) and Type=@type
    and status in('1','n')
    ) goUserID     flowNum     Type       status
    ---------- ----------- ---------- ----------
    cyong      2           b          1
      

  6.   

    create table tbtest(UserID varchar(50),flowNum int,Type  varchar(50),status varchar(50))
    insert tbtest
    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' --drop table tbtestSELECT UserID, flowNum ,Type INTO #TT FROM tbtest WHERE status='N' OR status ='1'SELECT * FROM #TT T WHERE NOT EXISTS(SELECT 1 FROM #TT T1 WHERE T.UserID=T1.UserID AND T1.flowNum <T.flowNum )
    UserID                                             flowNum     Type                                               
    -------------------------------------------------- ----------- -------------------------------------------------- 
    jacket                                             3           a 
    cyong                                              2           b 
    jay                                                3           b 
    jolin                                              4            b (所影响的行数为 4 行)打个表很难打,应该是楼主的意思不过楼主说会被修改就不知道如何了????没看懂
      

  7.   

    -- =========================================
    -- -----------t_mac 小编-------------------
       --------------------希望有天成为大虾---- 
    -- =========================================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),@type char(1)
    set @user='jacket'
    set @type='a'
    select * from tb 
    where   Type=@type and 
    flowNum=(
    select MIN(flowNum) as flowNum
    from tb 
    where flowNum>=(select flowNum from tb where UserID=@user and Type=@type) and Type=@type
    and status in('1','n')
    ) goUserID     flowNum     Type       status
    ---------- ----------- ---------- ----------
    jacket     3           a          n
      

  8.   

    DECLARE @TB TABLE([UserID] VARCHAR(8), [flowNum] INT, [Type] VARCHAR(1), [status] VARCHAR(1))
    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'declare @user varchar(8)
    set @user='jacket'select *
    from @TB as t
    where UserID=@user
       and not exists(select * from @TB 
                     where flowNum<(select flowNum from @TB where UserID=@user) 
                       and status in ('N','1'))
    /*
    UserID   flowNum     Type status 
    -------- ----------- ---- ------ 
    jacket   3           a    n
    */
      

  9.   

    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 @userid varchar(10)
    set @userid='cyong'  --输入参数userid
    select userid,flownum,a.[type],status from
    (select * from tb where userid = @userid and status in ('1','n')) a  --取出流程属于该用户且流程未结束的纪录
    inner join 
    (select min(flownum) flowno,[type] from tb where status in ('1','n') group by type) b  --取出各TYPE下的当前处理流程编号
    on a.flownum=b.flowno and a.[type]=b.[type]
      

  10.   

    --========+++++++++++++++++++++++++++++++++++==========
    --======= 每天都在进步,却依然追不上地球的自传=========
    --======= 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 NOT EXISTS (SELECT 1 FROM T WHERE USERID=@USERID AND STATUS IN ('Y','2') AND [TYPE]=@TYPE) 
    BEGIN
    INSERT INTO @TEMP SELECT NULL,NULL,NULL,NULL
    RETURN
    END
    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
    END
    RETURN
    END
    --正式查询
    SELECT * from dbo.F_GET('jay','a')
    /*
    USERID FLOWNUM TYPE STATUS
    jacket 3 a n
    */
    SELECT * from dbo.F_GET('JOLIN','a')
    /*
    USERID FLOWNUM TYPE STATUS
    jacket 3 a n
    */
    SELECT * from dbo.F_GET('jacket','a')
    /*
    USERID FLOWNUM TYPE STATUS
    NULL NULL NULL NULL
    */
    SELECT * from dbo.F_GET('zhangsan','a')
    /*
    USERID FLOWNUM TYPE STATUS
    NULL NULL NULL NULL
    */
    SELECT * from dbo.F_GET('zhangsan','b')
    /*
    USERID FLOWNUM TYPE STATUS
    cyong 2 b 1
    */
    SELECT * from dbo.F_GET('cyong','b')
    /*
    USERID FLOWNUM TYPE STATUS
    NULL NULL NULL NULL
    */
    SELECT * from dbo.F_GET('jay','b')
    /*
    USERID FLOWNUM TYPE STATUS
    cyong 2 b 1
    */
    SELECT * from dbo.F_GET('jay','c')
    /*
    USERID FLOWNUM TYPE STATUS
    jay 1 c n
    */
    SELECT * from dbo.F_GET('cyong','c')
    /*
    USERID FLOWNUM TYPE STATUS
    NULL NULL NULL NULL
    */  
      

  11.   

     我都试了一下你们的方法,存在一个问题
    比如
    第二段
    zhangsan  1    a    2 
    cyong    2    a    1 
    jay      3    a    1 
    jolin    4    a    n 
    jacket    5    a    1 当cyong登录时
    查询出
    cyong    2    a    1 
    如果jay 登录 则查不出如果是jolin登录的话 还会查出
    jolin    4    a    n 
    这里是错误的,因为工作流程还没有走到这里,这里应该查不出来才对
    问题出在status上
      

  12.   

    --========+++++++++++++++++++++++++++++++++++==========
    --======= 每天都在进步,却依然追不上地球的自传=========
    --======= 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