任务表
 TaskID    Date(时间)     User(发布人)    Amount(金额)
  1717     20120803       admin             1000  1718     20120803        admin             12000
流程表
 Id     taskID(任务ID)     节点步骤(Step)   处理人(ProUser)    处理时间(ProcTime) 9447     1717               Submit            User01             20120804 9448     1717               UpdateSerNo       User02             20120805 9449     1717                GM                User03             20120806 9450     1717                Cashier           User04             空 还未处理我想查出 任务表中每条任务到Cashier步骤 的处理人 ,最后每条任务最后处理时间 , 流程当前处理人,并可以根据以上条件查询我想得到的结果是 
TaskID Date(时间) User(发布人) Cashier步骤处理人(StepUserName)  最后处理时间(LastTime)    当前处理人(ProcTime)
 1717  20120803     admin            User04                     20120806                   User04              1718  20120803      admin            空                         空                         空

解决方案 »

  1.   


    select TaskId,[Date],[User],
    (select top 1 ProUser from 流程表 where taskId=a.TaskId and step='Cashier') as Cashier步骤处理人,
    (select top 1 ProcTime from 流程表 where taskId=a.TaskId order by ProcTime desc) as 最后处理时间,
    (select top 1 ProUser from 流程表 where taskId=a.TaskId and ProUser is null order by id) as  当前处理人
    from 任务表 a
      

  2.   


    但是我想根据  Cashier步骤处理人,  最后处理时间,    当前处理人 作为查询条件
      

  3.   

    with tt as 
    (
    select TaskId,[Date],[User],
    (select top 1 ProUser from 流程表 where taskId=a.TaskId and step='Cashier') as Cashier步骤处理人,
    (select top 1 ProcTime from 流程表 where taskId=a.TaskId order by ProcTime desc) as 最后处理时间,
    (select top 1 ProUser from 流程表 where taskId=a.TaskId and ProUser is null order by id) as  当前处理人
    from 任务表 a
    )
    select * From tt 
    where Cashier步骤处理人=@参数1
    and 最后处理时间> @参数2 and .....
      

  4.   


    select * from tasks
    --结果:
    taskid  date                    users   amount
    ----------------------------------------------
    1717 2012-08-03 00:00:00.000 admin 1000
    1718 2012-08-03 00:00:00.000 admin 12000
    ----------------------------------------------
    select * from process
    --结果:
    id      taskid   step          prouser   proctime
    -----------------------------------------------
    9447 1717 submit         user01 20120804
    9448 1717 updateserno user02 20120805
    9449 1717 gm         user03 20120806
    9450 1717 cashier         user04
    -----------------------------------------------
    --使用下面sql语句查询
    select dd.taskid,dd.date,dd.users,[cashier步骤处理人],mm.proctime [最后处理时间], [当前处理人]from 
    (
    select a.taskid TaskID,Date,a.users Users,b.prouser 'cashier步骤处理人',b.prouser '当前处理人' from tasks a left join (select *from process where step='cashier' ) b
    on a.taskid=b.taskid)dd left join(select taskid,max(proctime) proctime from process group by taskid)mm
    on dd.taskid=mm.taskid
    --结果:
    id      date                    users   cashier步骤处理人  最后处理时间     当前处理人
    -------------------------------------------------
    1717 2012-08-03 00:00:00.000 admin user04        20120806         user04
    1718 2012-08-03 00:00:00.000 admin NULL          NULL          NULL
    -------------------------------------------------
    --如果需要查询条件的话,可以在后面添加where子句;例如:
    where [当前处理人]='user04' and proctime>'2012-08-01'希望对你有帮助,共同学习!