2012-09-27 34 views
0

我有一个表像下面:如何为以下内容编写SQL Server存储过程?

create table testjob 
(
    jobid int, 
    jobname varchar(100), 
    time float, 
    name varchar(50) 
) 

insert into testjob values (1001,'java work',4.5,'arjun') 
insert into testjob values (1005,'sql work',10,'arjun') 
insert into testjob values (1010,'.net work',7.5,'arjun') 
insert into testjob values (1040,'java work',5.5,'ravi') 
insert into testjob values (1023,'php work',2.5,'arjun') 
insert into testjob values (1027,'.net work',3.5,'ravi') 

我希望有一个程序,使我的输出如下面的HTML格式如下图所示:

Name: Arjun (24.5 Hrs spent) 

jobname Time 

java work 4.5 
sql work 10 
.net work 7.5 
php work 2.5  

Name: Ravi(9 Hrs spent) 

jobname time 

java work 5.5 
.net work 3.5 
+5

SQL Server是一个数据存储和数据管理系统。你可以编写一个存储过程来返回将要进入该报告的**原始数据**但它不是** SQL Server的作业将其格式化为HTML - 这是您的前端(ASP.NET,PHP - 什么)是resposible的。 –

+0

如果可以,您可以尝试SSRS。但是,也许这个解决方案对你的任务来说太重了。 –

+0

你在你的客户和数据库之间使用什么语言?以更优雅的方式在这一层做这个html代码可能会更好。 – Vikdor

回答

1

通过thisthisthis

启发
--detail template 
declare @strDTmp nvarchar(200) = '<td>[job]</td><td>[hrs]</td>' 
--sum template 
declare @strSTmp nvarchar(200) = 'Name: [name] ([hrs] Hrs spent)' 
--Table head 
declare @strThead nvarchar(200) = '<th>jobname</th><th>Time</th>' 

    select 
    replace(replace(@strSTmp,'[name]',name),'[hrs]',stime) h1 
    ,(
     select 
     tr 
     from 
     (
     select 
      0 pos 
      ,name 
      ,@strThead tr 
     from 
      testjob 
     group by 
      name 
     union all 
     select 
      1 pos 
      ,name 
      ,replace(replace(@strDTmp,'[job]',jobname),'[hrs]',time) tr 
     from 
      testjob 
     ) t 
     where 
     t.name = sumtable.name 
     order by 
     pos 
     FOR XML PATH(''), root('table'), type 
    ) 
    from 
    (
    select 
     name 
     ,sum(time) stime 
    from 
     testjob sumtable 
    group by 
     name 
    ) sumtable 
    FOR XML PATH ('') 

Test on SQL Fiddle

结果:

<h1>Name: arjun (24.5 Hrs spent)</h1> 
<table> 
    <tr><th>jobname</th><th>Time</th></tr> 
    <tr><td>java work</td><td>4.5</td></tr> 
    <tr><td>sql work</td><td>10</td></tr> 
    <tr><td>.net work</td><td>7.5</td></tr> 
    <tr><td>php work</td><td>2.5</td></tr> 
</table> 
<h1>Name: ravi (9 Hrs spent)</h1> 
<table> 
    <tr><th>jobname</th><th>Time</th></tr> 
    <tr><td>java work</td><td>5.5</td></tr> 
    <tr><td>.net work</td><td>3.5</td></tr> 
</table>