sqL 工作流遇到的问题 求大神解答 万分感谢
任务表
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 空 空 空
[解决办法]
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
[解决办法]
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步骤处理人=@参数1and 最后处理时间> @参数2 and .....
[解决办法]
select * from tasks--结果:taskid date users amount----------------------------------------------1717 2012-08-03 00:00:00.000 admin 10001718 2012-08-03 00:00:00.000 admin 12000----------------------------------------------select * from process--结果:id taskid step prouser proctime-----------------------------------------------9447 1717 submit user01 201208049448 1717 updateserno user02 201208059449 1717 gm user03 201208069450 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' ) bon a.taskid=b.taskid)dd left join(select taskid,max(proctime) proctime from process group by taskid)mmon dd.taskid=mm.taskid--结果:id date users cashier步骤处理人 最后处理时间 当前处理人-------------------------------------------------1717 2012-08-03 00:00:00.000 admin user04 20120806 user041718 2012-08-03 00:00:00.000 admin NULL NULL NULL---------------------------------------------------如果需要查询条件的话,可以在后面添加where子句;例如:where [当前处理人]='user04' and proctime>'2012-08-01'