0
create table testjob  
(  
jobid int,  
jobname varchar(100),  
time float,  
name varchar(50),  
Date varchar(100),  
comments varchar(500)  
)

insert into testjob values ( 1001,'java work',4.5,'arjun','9/26/2012  12:00:00 AM','Sample test comments 1')
insert into testjob values ( 1005,'sql work',10,'arjun','9/28/2012  12:00:00 AM','Sample test comments 2')
insert into testjob values ( 1010,'.net work',7.5,'arjun','8/13/2012  12:00:00 AM','Sample test comments 3')
insert into testjob values ( 1040,'java work',5.5,'ravi','9/14/2012  12:00:00 AM','Sample test comments 1')
insert into testjob values ( 1023,'php work',2.5,'arjun','9/5/2012  12:00:00 AM','Sample test comments 4')
insert into testjob values ( 1027,'.net work',3.5,'ravi','8/24/2012  12:00:00 AM','Sample test comments 2')

我想要一个不使用游标的过程,以便我的输出如下:(如果可能,我希望使用 with 运算符进行查询)

Name:Arjun(24.5 Hrs spent)

jobname          Time            Date                Comments  
java work     4.5     9/26/2012  12:00:00 AM   Sample test comments 1   
sql work      10      9/28/2012  12:00:00 AM   Sample test comments 2  
.net work     7.5     8/13/2012  12:00:00 AM   Sample test comments 3  
php  work     2.5     9/5/2012  12:00:00 AM    Sample test comments 4

Name:Ravi(9 Hrs spent)

jobname       time           Date             Comments  
java work     5.5     9/14/2012  12:00:00 AM   Sample test comments 1  
.net work     3.5     8/24/2012  12:00:00 AM   Sample test comments 2  
4

1 回答 1

3

看看这个SQL Fiddle

您的查询无需使用 WITH。

select name,case when jobname is null
                 then cast(sum(time) as varchar(12)) + ' hrs spent'
                 else jobname end jobname,time,date,comments
from testjob
group by grouping sets ((name),(name,jobname,time,date,comments))
order by name,comments

您实际上并不需要分组集,我将其包含在内只是为了向您展示如何使用查询工具中的汇总标题查看它。如果您将此数据带到 Visual Studio 等前端工具,您应该控制那里的分组并简单地以排序方式返回数据,例如

select name,jobname,time,date,comments
from testjob
order by name,comments
You keep a running total of time until the name changes.

仅供参考,您确实应该选择更好的排序顺序,例如“日期”而不是“评论”,但这是我发现的唯一可以准确给出您显示的结果的顺序。

于 2012-10-05T07:25:26.510 回答