原帖路径(原帖太乱不具备参考性,但回答到原贴我才能给80分,本人没分了)
http://topic.csdn.net/u/20110322/20/2409ac7d-12aa-47d1-8bf4-860e835757ab.html?45600
说明:
task即任务的意思,同一个流程下有多个task,start为开始,end为结束。
按start->task1->task2->review->review2->end的顺序执行,中途如果被拒绝则退回上一步。
review2可能不存在,也就是有可能是这样start->task1->task2->review->end。id:流程号
type1:类型1
type2:类型2
n:步骤数,不管通过或拒绝n都加1,直到流程结束
users:此时提交任务的人
choice:值为“通过”时进入下一任务,为“拒绝”时返回上一任务。
task:任务类型(即task1,task2,review,review2共4种,start和end不算)--原始数据
declare @tb table (id nvarchar(20),type1 nvarchar(20),type2 nvarchar(20),n int,users nvarchar(20),choice nvarchar(20),task nvarchar(20))
insert into @tb
select '1','a','s1','1','user1',null,'start' union all--任务开始
select '1','a','s1','2','user3','通过','task1' union all--user3对自己的工作满意,提交任务
select '1','a','s1','3','user4','拒绝','task2' union all--user3被task2中的user4拒绝
select '1','a','s1','4','user3','通过','task1' union all--user3修改后再次提交
select '1','a','s1','5','user4','拒绝','task2' union all--user3再次被user4拒绝
select '1','a','s1','6','user3','通过','task1' union all--user3再次提交
select '1','a','s1','7','user4','通过','task2' union all--user4终于满意,选择了通过
select '1','a','s1','8','user2','拒绝','review' union all--user4被user2拒绝了,返回task2
select '1','a','s1','9','user4','拒绝','task2' union all--user4被老大拒绝后,认为是task1的人犯的错,再次拒绝(退回task1),此时被拒绝的是最初的user3
select '1','a','s1','10','user3','通过','task1' union all--user3再次提交
select '1','a','s1','11','user4','通过','task2' union all--user4满意,通过
select '1','a','s1','12','user2','通过','review' union all--user2满意,通过
select '1','a','s1','13',null,null,'end' union all--结束select '2','a','s2','1','user1',null,'start' union all--任务开始
select '2','a','s2','2','user3','通过','task1' union all--user3努力的做完后,提交
select '2','a','s2','3','user4','拒绝','task2' union all--user3被user4狠狠的拒绝了
select '2','a','s2','4','user7','通过','task1' union all--user3无法胜任工作,task1的工作改为user7进行,user7做完后提交了
select '2','a','s2','5','user8','拒绝','task2' union all--当初task2的user4出差了,改为user8来审核,可惜不通过,所以user7被user8拒绝了
select '2','a','s2','6','user7','通过','task1' union all--user7再次提交
select '2','a','s2','7','user8','通过','task2' union all--这次user8满意,通过了
select '2','a','s2','8','user6','拒绝','review' union all--user8被老大user6狠狠拒绝了
select '2','a','s2','9','user4','通过','task2' union all--user8不干了,改由user4继续task2的任务,user4稍微改了下,提交
select '2','a','s2','10','user6','拒绝','review' union all--不幸user4也被user6拒绝了
select '2','a','s2','11','user4','通过','task2' union all--user4再次提交
select '2','a','s2','12','user6','通过','review' union all--user6终于满意,通过
select '2','a','s2','13',null,null,'end' union all--任务结束select '3','a','s1','1','user1',null,'start' union all--任务开始
select '3','a','s1','2','user3','通过','task1' union all--user3提交通过
select '3','a','s1','3','user4','通过','task2' union all--user4满意,直接通过
select '3','a','s1','4','user5','通过','review' union all--user5满意,直接通过
select '3','a','s1','5','user1','拒绝','review2' union all--老大user1突击检查,结果不满意,选择拒绝,被拒绝的是user5
select '3','a','s1','6','user5','通过','review' union all--user5修改了一下,提交通过
select '3','a','s1','7','user1','通过','review2' union all--review2--user1满意,通过
select '3','a','s1','8',null,null,'end' union allselect '4','b','s2','1','user5',null,'start' union all--任务开始
select '4','b','s2','2','user7','通过','task1' union all--user7提交通过
select '4','b','s2','3','user8','通过','task2' union all--user8提交通过
select '4','b','s2','4','user6','通过','review' union all--user6提交通过
select '4','b','s2','5','user5','拒绝','review2' union all--user5突击检查,不满拒绝。
select '4','b','s2','6','user6','通过','review' union all--user6再次提交通过
select '4','b','s2','7','user5','通过','review2' union all--user5满意,通过
select '4','b','s2','8',null,null,'end'--任务结束select '5','a','s1','1','user1',null,'start' union all--任务开始
select '5','a','s1','2','user3','通过','task1' union all--user3提交通过
select '5','a','s1','3','user4','拒绝','task2' union all--user4直接拒绝,退回
select '5','a','s1','4','user3','通过','task1' union all--user3提交通过
select '5','a','s1','5','user4','通过','task2' union all--user4满意,通过
select '5','a','s1','6','user5','通过','review' union all--user5满意,直接通过
select '5','a','s1','7',null,null,'end' union all--任务结束
--需要得到的目标数据
--统计各用户被拒绝的次数
--t1user为task1中被拒绝的用户,t1n为该用户被task2拒绝的次数
--t2user为task2中被拒绝的用户,t2n为该用户被review拒绝的次数
--t3user为review中被拒绝的用户,t3n为该用户被review2拒绝的次数
--按type1,type2,t1user,t2user,t3user划分出不同的行,也就是group bydeclare @tb_result table (type1 nvarchar(20), type2 nvarchar(20),t1user nvarchar(20), t1n int, t2user nvarchar(20),t2n int,t3user nvarchar(20), t3n int)
insert into @tb_result
select 'a','s1','user3','2','user4','1','user2','0' union all
select 'a','s1','user3','2','user4','1','user5','1' union all
select 'a','s2','user3','1','user4','0','user6','0' union all
select 'a','s2','user7','1','user8','1','user6','0' union all
select 'b','s2','user5','0','user7','0','user5','1'
select * from @tb_result
--补充说明:
--同1个id下同一task被多次拒绝,算1次,
--同1个id下同一task有a,b共2个人做过,如果都被拒绝,a,b都算1次,否则算0次
--同1个id下,a提交的任务被拒绝了,任务退回,但由b代替a重做,此时被拒绝的是a不是b

解决方案 »

  1.   


    --原始数据
    declare @tb table (id nvarchar(20),type1 nvarchar(20),type2 nvarchar(20),n int,users nvarchar(20),choice nvarchar(20),task nvarchar(20))
    insert into @tb
    select '1','a','s1','1','user1',null,'start' union all--任务开始
    select '1','a','s1','2','user3','通过','task1' union all--user3对自己的工作满意,提交任务
    select '1','a','s1','3','user4','拒绝','task2' union all--user3被task2中的user4拒绝
    select '1','a','s1','4','user3','通过','task1' union all--user3修改后再次提交
    select '1','a','s1','5','user4','拒绝','task2' union all--user3再次被user4拒绝
    select '1','a','s1','6','user3','通过','task1' union all--user3再次提交
    select '1','a','s1','7','user4','通过','task2' union all--user4终于满意,选择了通过
    select '1','a','s1','8','user2','拒绝','review' union all--user4被user2拒绝了,返回task2
    select '1','a','s1','9','user4','拒绝','task2' union all--user4被老大拒绝后,认为是task1的人犯的错,再次拒绝(退回task1),此时被拒绝的是最初的user3
    select '1','a','s1','10','user3','通过','task1' union all--user3再次提交
    select '1','a','s1','11','user4','通过','task2' union all--user4满意,通过
    select '1','a','s1','12','user2','通过','review' union all--user2满意,通过
    select '1','a','s1','13',null,null,'end' union all--结束select '2','a','s2','1','user1',null,'start' union all--任务开始
    select '2','a','s2','2','user3','通过','task1' union all--user3努力的做完后,提交
    select '2','a','s2','3','user4','拒绝','task2' union all--user3被user4狠狠的拒绝了
    select '2','a','s2','4','user7','通过','task1' union all--user3无法胜任工作,task1的工作改为user7进行,user7做完后提交了
    select '2','a','s2','5','user8','拒绝','task2' union all--当初task2的user4出差了,改为user8来审核,可惜不通过,所以user7被user8拒绝了
    select '2','a','s2','6','user7','通过','task1' union all--user7再次提交
    select '2','a','s2','7','user8','通过','task2' union all--这次user8满意,通过了
    select '2','a','s2','8','user6','拒绝','review' union all--user8被老大user6狠狠拒绝了
    select '2','a','s2','9','user4','通过','task2' union all--user8不干了,改由user4继续task2的任务,user4稍微改了下,提交
    select '2','a','s2','10','user6','拒绝','review' union all--不幸user4也被user6拒绝了
    select '2','a','s2','11','user4','通过','task2' union all--user4再次提交
    select '2','a','s2','12','user6','通过','review' union all--user6终于满意,通过
    select '2','a','s2','13',null,null,'end' union all--任务结束select '3','a','s1','1','user1',null,'start' union all--任务开始
    select '3','a','s1','2','user3','通过','task1' union all--user3提交通过
    select '3','a','s1','3','user4','通过','task2' union all--user4满意,直接通过
    select '3','a','s1','4','user5','通过','review' union all--user5满意,直接通过
    select '3','a','s1','5','user1','拒绝','review2' union all--老大user1突击检查,结果不满意,选择拒绝,被拒绝的是user5
    select '3','a','s1','6','user5','通过','review' union all--user5修改了一下,提交通过
    select '3','a','s1','7','user1','通过','review2' union all--review2--user1满意,通过
    select '3','a','s1','8',null,null,'end' union allselect '4','b','s2','1','user5',null,'start' union all--任务开始
    select '4','b','s2','2','user7','通过','task1' union all--user7提交通过
    select '4','b','s2','3','user8','通过','task2' union all--user8提交通过
    select '4','b','s2','4','user6','通过','review' union all--user6提交通过
    select '4','b','s2','5','user5','拒绝','review2' union all--user5突击检查,不满拒绝。
    select '4','b','s2','6','user6','通过','review' union all--user6再次提交通过
    select '4','b','s2','7','user5','通过','review2' union all--user5满意,通过
    select '4','b','s2','8',null,null,'end'--任务结束select '5','a','s1','1','user1',null,'start' union all--任务开始
    select '5','a','s1','2','user3','通过','task1' union all--user3提交通过
    select '5','a','s1','3','user4','拒绝','task2' union all--user4直接拒绝,退回
    select '5','a','s1','4','user3','通过','task1' union all--user3提交通过
    select '5','a','s1','5','user4','通过','task2' union all--user4满意,通过
    select '5','a','s1','6','user5','通过','review' union all--user5满意,直接通过
    select '5','a','s1','7',null,null,'end' union all--任务结束
    --需要得到的目标数据
    --统计各用户被拒绝的次数
    --t1user为task1中被拒绝的用户,t1n为该用户被task2拒绝的次数
    --t2user为task2中被拒绝的用户,t2n为该用户被review拒绝的次数
    --t3user为review中被拒绝的用户,t3n为该用户被review2拒绝的次数
    --按type1,type2,t1user,t2user,t3user划分出不同的行,也就是group bydeclare @tb_result table (type1 nvarchar(20), type2 nvarchar(20),t1user nvarchar(20), t1n int, t2user nvarchar(20),t2n int,t3user nvarchar(20), t3n int)
    insert into @tb_result
    select 'a','s1','user3','2','user4','1','user2','0' union all
    select 'a','s1','user3','2','user4','1','user5','1' union all
    select 'a','s2','user3','1','user4','0','user6','0' union all
    select 'a','s2','user7','1','user8','1','user6','0' union all
    select 'b','s2','user5','0','user7','0','user5','1'
    select * from @tb_result
    --补充说明:
    --同1个id下同一task被多次拒绝,算1次,
    --同1个id下同一task有a,b共2个人做过,如果都被拒绝,a,b都算1次,否则算0次
    --同1个id下,a提交的任务被拒绝了,任务退回,但由b代替a重做,此时被拒绝的是a不是b
      

  2.   


    你最后给的统计结果答案看的头晕,都不知道你怎么聚合的,你可以看看下面id的结果是否正确,等对了在给完整语句
    select c.type1,c.type2,c.[1],sum(d.[1]),c.[2],sum(d.[2]),c.[3],sum(d.[3]) from 
    (select cid,type1,type2,[1],[2],[3] 
    from 
    (select NTILE(1) over (order by getdate()) as cid,type1,type2,users,task from temp where ID=5) a
    pivot (max(users) for task in ([1],[2],[3])) b) c
    join
    (select cid,type1,type2,[1],[2],[3] 
    from (select NTILE(1) over (order by getdate()) as cid,type1,type2,cou,task from temp where ID=5) a
    pivot (max(cou) for task in ([1],[2],[3])) b) d
    on c.cid=d.cid
    group by c.type1,c.type2,c.[1],c.[2],c.[3]id=1的时候type1                type2                1                                2                                3                    
    -------------------- -------------------- -------------------- ----------- -------------------- ----------- -------------------- -----------
    a                    s1                   user3                1           user4                1           user2                0(1 行受影响)id=2的时候
    type1                type2                1                                2                                3                    
    -------------------- -------------------- -------------------- ----------- -------------------- ----------- -------------------- -----------
    a                    s2                   user3                1           user4                0           user6                0
    a                    s2                   user7                1           user8                1           user6                0(2 行受影响)id=3
    type1                type2                1                                2                                3                    
    -------------------- -------------------- -------------------- ----------- -------------------- ----------- -------------------- -----------
    a                    s1                   user3                0           user4                0           user5                1(1 行受影响)id=4
    type1                type2                1                                2                                3                    
    -------------------- -------------------- -------------------- ----------- -------------------- ----------- -------------------- -----------
    b                    s2                   user7                0           user8                0           user6                1(1 行受影响)id=5type1                type2                1                                2                                3                    
    -------------------- -------------------- -------------------- ----------- -------------------- ----------- -------------------- -----------
    a                    s1                   user3                1           user4                0           user5                0(1 行受影响)