将Select语句作为格式化HTML返回(SQL 2005)

Con*_*eak -3 sql sql-server sql-server-2005

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

   Gender | Age | Name
    Male  | 30  | Bill
  Female  | 27  | Jenny
  Female  | 27  | Debby 
   Male   | 44  | Frank
Run Code Online (Sandbox Code Playgroud)

我试图将其显示为特殊格式的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>
Run Code Online (Sandbox Code Playgroud)

我试过使用,FOR XML但没有给出我想要的结果.它没有删除多个GenderAge返回的字段.正如您在此HTML中看到的那样,它将所有内容复合在一起,并且只在末端节点上提供重复项.

Aaron Bertrand在这里提供了一个很好的方法返回选择语句作为格式化的HTML,似乎在SQL 2008中完美运行,但我在寻找一些在2005年也能运行的东西,除了小东西,比如+=运算符和设置默认的DECLARE值,只是没有在2005年展出.

如何在SQL Server 2005中实现这样的功能?

Mik*_*son 5

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')
Run Code Online (Sandbox Code Playgroud)

  • +1.比我的清洁得多.看看你避免过的所有戏剧.:-) (2认同)