读书人

sqL 工作流遇到的有关问题 求大神解

发布时间: 2012-10-29 10:03:53 作者: rapoo

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 空 空 空



[解决办法]

SQL code
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
[解决办法]
SQL code
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 .....
[解决办法]
SQL code
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' 

读书人网 >SQL Server

热点推荐