我正在使用SQL Server 2008 R2中的FOR XML语句创建HL7 Continuity of Care Document(CCD).
我用这种方法做了很多,但这是我第一次在HTML表格中表示部分数据,这给我带来了麻烦.
所以,我在表格中有以下信息:
  Problem  |   Onset    | Status
---------------------------------
  Ulcer    | 01/01/2008 | Active
  Edema    | 02/02/2005 | Active
我试图渲染以下内容
<tr>
    <th>Problem</th>
    <th>Onset</th>
    <th>Status</th>
</tr>
<tr>
    <td>Ulcer</td>
    <td>01/01/2008</td>
    <td>Active</td>
</tr>
<tr>
    <td>Edema</td>
    <td>02/02/2005</td>
    <td>Active</td>
</tr>
我正在使用此查询:
SELECT    p.ProblemType AS "td"
    , p.Onset AS "td"
    , p.DiagnosisStatus AS "td"
FROM tblProblemList p
WHERE p.PatientUnitNumber = @PatientUnitNumber
FOR XML PATH('tr')
我一直得到以下内容:
<tr>
  <td>Ulcer2008-01-01Active</td>
</tr>
<tr>
  <td>Edema2005-02-02Active</td>
</tr>
有人有任何建议吗?
我正在使用通用系统进行报告,该系统从数据库视图中获取数据(SQL Server 2005).在这个视图中,我必须在一行中合并一对多关系中的数据,并在此线程中使用priyanka.sarkar描述的解决方案:将子查询中的多个结果合并为一个逗号分隔值.该解决方案使用SQLXML来合并数据(子查询):
SELECT STUFF(
    (    SELECT ', ' + Name 
         FROM MyTable _in 
         WHERE _in.ID = _out.ID 
         FOR XML PATH('')),        -- Output multiple rows as one xml type value,
                                   -- without xml tags
    1, 2, '')      -- STUFF: Replace the comma at the beginning with empty string
FROM MyTable _out 
GROUP BY ID        -- Removes duplicates
这完全有效(它甚至没有那么重的性能),除了我的数据现在& 通过SQLXML 进行XML编码(&=>  等) - 毕竟我不想要XML数据,我只是用它作为一个技巧 - 因为通用系统我无法对此进行编码以清理它,因此编码数据直接进入报告.我不能在通用系统中使用存储过程,因此CURSOR-merge或COALESCE-ing不是一个选项......
所以我正在寻找的是T-SQL中的一种方式,它允许我再次解码XML,甚至更好:避免SQLXML对其进行编码.显然我可以编写一个存储函数来执行此操作,但我更喜欢内置,更安全的方式...
谢谢你的帮助...