我有一个看起来像这样的数据集:
Gender | Age | Name Male | 30 | Bill Female | 27 | Jenny Female | 27 | Debby Male | 44 | Frank
我试图将其显示为特殊格式的HTML代码:
<ul> <li>Male <ul> <li>30 <ul> <li>Bill</li> </ul> </li> <li>44 <ul> <li>Frank</li> </ul> </li> </ul> </li> </ul> <ul> <li>Female <ul> <li>27 <ul> <li>Jenny</li> <li>Debby</li> </ul> </li> </ul> </li> </ul>
我尝试使用,FOR XML但是没有得到我想要的结果。它没有删除多个Gender和Age返回的字段。如您在此HTML中所看到的,它正在将所有内容混合在一起,并且仅在末端节点提供重复项。
FOR XML
Gender
Age
亚伦·贝特朗(Aaron Bertrand)在这里提供了一种出色的方法,以格式化的HTML形式返回选择语句,该SQL在SQL 2008中似乎完美地工作,但是我在寻找一种在2005年也能工作的东西,除了一些小东西,例如+=运算符和设置默认的DECLARE值,不会在2005年展示。
+=
在SQL Server 2005中如何实现这种效果?
declare @T table ( Gender varchar(10), Age int, Name varchar(10) )
insert into @T values ('Male', 30, 'Bill') insert into @T values ('Female', 27, 'Jenny') insert into @T values ('Female', 27, 'Debby') insert into @T values ('Male', 44, 'Frank') select Gender as 'li', (select T2.Age as 'li', (select T3.Name as 'li' from @T as T3 where T2.Age = T3.Age and T1.Gender = T3.Gender for xml path(''), root('ul'), type) as 'li' from @T as T2 where T1.Gender = T2.Gender group by T2.Age for xml path(''), root('ul'), type) as 'li' from @T as T1 group by Gender for xml path('ul')