小编典典

以格式HTML返回Select语句(SQL 2005)

sql

我有一个看起来像这样的数据集:

   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但是没有得到我想要的结果。它没有删除多个GenderAge返回的字段。如您在此HTML中所看到的,它正在将所有内容混合在一起,并且仅在末端节点提供重复项。

亚伦·贝特朗(Aaron
Bertrand)在这里提供了一种出色的方法,以格式化的HTML形式返回选择语句,该SQL在SQL
2008中似乎完美地工作,但是我在寻找一种在2005年也能工作的东西,除了一些小东西,例如+=运算符和设置默认的DECLARE值,不会在2005年展示。

在SQL Server 2005中如何实现这种效果?


阅读 243

收藏
2021-05-16

共1个答案

小编典典

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')
2021-05-16