2011-11-16 65 views
0

是否有可能从这个例子表:生成SQL表HTML

CREATE TABLE #Actions(EmployeeId INT,EmployeeName VARCHAR(100),ActionStart TIME,ActionEnd TIME,Type VARCHAR(10)); 
INSERT INTO #Actions(EmployeeId,EmployeeName,ActionStart,ActionEnd, Type) 
VALUES (1,'Bob','09:00','12:00', 'action'),(1,'Bob','14:30','16:00', 'action'),(1,'Bob','18:00','20:00', 'event'),(2,'Susan','10:00','12:00', 'action'); 

有在这个XML输出?

<div class="employee" employeeid="1" employeename="Bob"> 
    <div class="action" start="09:00" end="12:00" type="action"></div> 
    <div class="action" start="14:30" end="16:00" type="action"></div> 
    <div class="action" start="18:00" end="20:00" type="event"></div> 
</div> 
<div class="employee" employeeid="2" employeename="Susan"> 
    <div class="action" start="10:00" end="12:00" type="action"></div> 
</div> 

回答

2
select 'employee' as '@class', 
     a1.EmployeeId as '@employeeid', 
     max(a1.EmployeeName) as '@employeename', 
     (select 'action' as '@class', 
       left(a2.ActionStart, 5) as '@start', 
       left(a2.ActionEnd, 5) as '@end', 
       a2.Type as '@type' 
     from #Actions as a2 
     where a1.EmployeeId = a2.EmployeeId 
     for xml path('div'), type) 
from #Actions as a1 
group by a1.EmployeeId 
for xml path('div') 
+0

一块蛋糕。我从来没有在SQL中使用过XML,并没有看到一个简单的子查询可以解决这个问题。谢谢。 – John