我有一个项目,需要一个XML数据馈送,而我不是一个XML程序员...

我已经弄清楚了创建以下结果的SQL:

<Batch>
  <Policy>
    <PolicyNumber>2134</PolicyNumber>
    <TransactionID>1</TransactionID>
    <Coverages>
      <Coverage CvgCode="1234">50.00</Coverage>
    </Coverages>
  </Policy>
  <Policy>
    <PolicyNumber>2134/PolicyNumber>
    <TransactionID>1</TransactionID>
    <Coverages>
      <Coverage CvgCode="1235">30.00</Coverage>
    </Coverages>
  </Policy>
  <Policy>
    <PolicyNumber>3124</PolicyNumber>
    <TransactionID>1</TransactionID>
    <Coverages>
      <Coverage CvgCode="1234">10.00</Coverage>
    </Coverages>
  </Policy>
</Batch>

...我需要将它格式化成如下所示:

<Batch>
  <Policy>
    <PolicyNumber>2134</PolicyNumber>
    <TransactionID>1</TransactionID>
    <Coverages>
      <Coverage CvgCode="1234">50.00</Coverage>
      <Coverage CvgCode="1235">30.00</Coverage>
    </Coverages>
  </Policy>
  <Policy>
    <PolicyNumber>3124</PolicyNumber>
    <TransactionID>1</TransactionID>
    <Coverages>
      <Coverage CvgCode="1234">10.00</Coverage>
    </Coverages>
  </Policy>
</Batch>

我想我需要一个XSL样式表来组合 node ,但我不知道从哪里开始.任何帮助都将不胜感激.蒂娅.

(数据集的SQL代码...

CREATE Table ReportData (
    PolicyNumber varchar(20) null
    ,TransactionID int null
    ,ClassCode varchar(5) null
    ,Amount money null
)

INSERT INTO ReportData
VALUES
('2134',1,'1234',50.00)
,('2134',1,'1235',30.00)
,('3124',1,'1234',10.00)

SELECT 
    [PolicyNumber] 
    ,TransactionID
    ,ClassCode "Coverages/Coverage/@CvgCode"
    ,Amount "Coverages/Coverage"
FROM ReportData 
FOR XML PATH ('Policy'), ROOT('Batch'), ELEMENTS

)

推荐答案

在您的情况下,不需要使用XSLT.

SQL Server的XQuery功能强大,可以为您的任务一次合成所需的XML.

SQL

-- DDL and sample data population, start
DECLARE @tbl Table (
    PolicyNumber varchar(20) null
    ,TransactionID int null
    ,ClassCode varchar(5) null
    ,Amount money null
)
INSERT INTO @tbl VALUES
('2134',1,'1234',50.00)
,('2134',1,'1235',30.00)
,('3124',1,'1234',10.00)
-- DDL and sample data population, end

SELECT PolicyNumber, TransactionID
    , (
        SELECT ClassCode AS [@CvgCode]
            , Amount AS [*]
        FROM @tbl AS c  -- child
        WHERE c.PolicyNumber = p.PolicyNumber
        FOR XML PATH ('Coverage'), TYPE, ROOT('Coverages')
)
FROM @tbl AS p  -- parent
GROUP BY PolicyNumber,TransactionID
FOR XML PATH ('Policy'), TYPE, ROOT('Batch')

Output XML

<Batch>
  <Policy>
    <PolicyNumber>2134</PolicyNumber>
    <TransactionID>1</TransactionID>
    <Coverages>
      <Coverage CvgCode="1234">50.0000</Coverage>
      <Coverage CvgCode="1235">30.0000</Coverage>
    </Coverages>
  </Policy>
  <Policy>
    <PolicyNumber>3124</PolicyNumber>
    <TransactionID>1</TransactionID>
    <Coverages>
      <Coverage CvgCode="1234">10.0000</Coverage>
    </Coverages>
  </Policy>
</Batch>

Sql相关问答推荐

如何用3个(半)固定位置建模团队,并有效地搜索相同/不同的团队?

使用Lead获取下一个不同的日期

如何嵌套两条SQL语句

如何在SQL Server中拆分包含字符和数字的列?

对表进行多项 Select 以返回最大值和时间

正在编写查询.我需要将订阅的时间段分为第一个订阅中包含的另一个订阅之前和之后的时间段

仅在日期相隔时递增(Oracle SQL)

每个学校 Select N个最新的行,但跳过同一学生的重复行

配置单元查询失败:无法识别';附近的输入;LEFT'';(select子句中的';';col'

计算不同模式的时间跨度

给定 3 个键列,从一个表中 Select 另一表中不存在的所有数据

我可以在 T-SQL (SQL Server) 的函数内使用 OPTION 子句吗?

如何使用 join 和 where 子句从另一表中仅删除一个表中的值

获取所有用户的第一次和最后一次发货以及到达日期

使用对 nvarchar 列的多个 LIKE 操作优化 SQL 查询

使用 R 遍历 SQL 查询,每次替换一个变量

多列上的 SQL UNIQUE 约束 - 它们的组合必须是唯一的还是至少其中之一?

如何通过子 Select 在一次更新(并行数组)中多次更新相同的行

并非所有变量都绑定在 PL SQL 函数中

Lag() 获取snowflake的值变化