首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

刚才那个SQL 这次小弟我讲详细点

2012-07-31 
刚才那个SQL 这次我讲详细点UserID flowNum Type statusjay1aYjolin2a2jacket3anzhangsan 4a1cyong5anjay6

刚才那个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 
其他人登录后都查不出


不知道这样讲 清楚没有.


[解决办法]

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

热点排行