表t1字段 id  App_state  currentDispose curUser
     1     1          内部阅办        cp
     1     2          分配项目组      xm
     1     1          内部阅办        zj
     2     1          会签             xm
     2     1          会签             cp
     3     1          独立节点         user1
(id代表流程id,App_state代表流程节点状态,currentDispose代表流程节点名称,curUser代表流程节点处理人)字段id相同的行表示是同一个流程的多个办理人:
例如id=1:
有三行数据,由于有一行App_state=2表示流程一现在由xm发起了内部阅办,分别发给了cp和zj,实际流程当前节点是App_state=2这行的currentDispose。
例如id=2:
有两行数据,由于App_state没有等于2的且多余1行,说明流程二分别发给了xm和cp进行会签。
例如id=3:
有一行数据,且App_state=1,代表这一行是流程当前节点,直接取currentDispose和curUser即可。不知道有没有说清楚,总之想要查出每个流程当前的节点名称和处理人,结果应该是:
id      currentDispose curUser 
 1         分配项目组        xm
 2           会签          xm,cp
 3         独立节点        user1

解决方案 »

  1.   


    with tb(a,b,c,d)as(
    select  1,     1,          '内部阅办',       'cp' union all
    select  1,     2,          '分配项目组',      'xm' union all
    select  1,     1,          '内部阅办',        'zj' union all
    select  2,     1,          '会签',             'xm' union all
    select  2,     1,          '会签',             'cp' union all
    select  3,     1,         '独立节点',         'user1'
    )
    select distinct a,b,stuff((select ','+d from tb where a.a=a and a.b=b for xml path('')) ,1,1,'')d
    from tb a where not exists (select 1 from tb where a=a.a and a.b<b) /*
    运行结果
    a b d
    1 2 xm
    2 1 xm,cp
    3 1 user1
    */
      

  2.   

    如果App_state 只有1或2两种状态,这没问题