【发布时间】:2020-09-21 11:43:50
【问题描述】:
我希望生成以下示例格式的 XML 输出:
<?xml version="1.0" encoding="utf-8"?>
<PSD006-ShortTermLoans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:fsa-gov-uk:MER:PSD006:1 PSD006-Schema.xsd" xmlns="urn:fsa-gov-uk:MER:PSD006:1">
<PSDFeedHeader>
<Submitter>
<SubmittingFirm>713984</SubmittingFirm>
</Submitter>
<ReportDetails>
<ReportCreationDate>2020-04-23</ReportCreationDate>
<ReportIdentifier>PSD006_713984__50</ReportIdentifier>
</ReportDetails>
</PSDFeedHeader>
<PSD006FeedMsg>
<CoreItems>
<FirmReferenceNumber>713984</FirmReferenceNumber>
<TransRef>713984_D000147827</TransRef>
<Cancellation>false</Cancellation>
</CoreItems>
<ShortTermLoans>
<TransactionDate>2020-03-21</TransactionDate>
<LoanAmount>1000</LoanAmount>
<LoanType>HCST</LoanType>
<APR>399.41</APR>
<ArrangementFee>0</ArrangementFee>
<TotalAmountPayable>1834</TotalAmountPayable>
<Rollover>N</Rollover>
<OrderOfRollover>0</OrderOfRollover>
<LengthOfTerm>272</LengthOfTerm>
<ReasonForLoan>P</ReasonForLoan>
<DOBOfBorrower>1979-10-07</DOBOfBorrower>
<PostCode>N14 6HE</PostCode>
<MonthlyIncomeOfBorrower>3166</MonthlyIncomeOfBorrower>
<MaritalStatusOfBorrower>O</MaritalStatusOfBorrower>
<ResidentialStatusOfBorrower>X</ResidentialStatusOfBorrower>
<EmploymentStatusOfBorrower>EF</EmploymentStatusOfBorrower>
</ShortTermLoans>
</PSD006FeedMsg>
</PSD006-ShortTermLoans>
这是上述 XML 格式所需的示例数据。
CREATE TABLE #Loans ( [Transref] varchar(16), [TransactionDate] date, [OriginalAdvance] money, [LoanType] varchar(4), [ContractualAPR] float(8), [OriginalProjectedTotalRepayable] money, [OriginalTerm] int, [ReasonforLoan] varchar(4), [DOB] date, [Postcode] varchar(8), [Salary] int, [SalaryFrequency] int, [ResidentialStatus] int, [EmploymentStatus] int )
INSERT INTO #Loans
VALUES
( '11', N'2020-06-22T00:00:00', 300.0000, 'HCST', 790, 1000.0000, 6, 'HCST', N'1999-01-31T00:00:00', 'HG2 9DX', 20000, 1508, 1486, 470 ),
( '12', N'2020-06-22T00:00:00', 1000.0000, 'HCST', 99.9, 1000.0000, 12, 'HCST', N'1999-01-31T00:00:00', 'HG2 9DX', 20000, 1508, 1486, 470 ),
( '13', N'2020-06-22T00:00:00', 1000.0000, 'HCST', 99.9, 1000.0000, 12, 'HCST', N'1999-01-31T00:00:00', 'HG2 9DX', 20000, 1508, 1486, 470 ),
( '14', N'2020-06-22T00:00:00', 1000.0000, 'HCST', 99.9, 1000.0000, 12, 'HCST', N'1999-01-31T00:00:00', 'HG2 9DX', 20000, 1508, 1486, 470 ),
( '17', N'2020-08-15T00:00:00', 750.0000, 'HCST', 392.71, 1000.0000, 9, 'HCST', N'1995-01-01T00:00:00', 'SE21 8NZ', 15000, 1508, 1472, 449 ),
( '17', N'2020-08-15T00:00:00', 750.0000, 'HCST', 392.71, 1000.0000, 9, 'HCST', N'1995-01-01T00:00:00', 'SE21 8NZ', 15000, 1508, 1472, 449 ),
( '20', N'2020-07-30T00:00:00', 800.0000, 'HCST', 399.4, 1000.0000, 9, 'HCST', N'1985-03-12T00:00:00', 'EH21 6UH', 21000, 1499, 1477, 500 ),
( NULL, N'2020-08-05T00:00:00', 1000.0000, 'HCST', 790, 1000.0000, 12, 'HCST', N'1980-07-07T00:00:00', 'BD1 3LY', 2000, 1508, 1481, 470 ),
( '37', N'2020-08-22T00:00:00', 300.0000, 'HCST', 792.4, 1000.0000, 6, 'HCST', N'1999-01-31T00:00:00', 'HG2 9DX', 35000, 1508, NULL, 470 ),
( '38', N'2020-08-19T00:00:00', 1000.0000, 'HCST', 790, 1000.0000, 12, 'HCST', N'1990-07-07T00:00:00', 'BD1 3LY', 2000, 1508, 1481, 470 )
这是我目前的查询:
SELECT
(
SELECT '99999' AS Submitter
FOR XML PATH('SubmittingFirm'), ROOT ('PSDFeedHeader'), TYPE
),
(
SELECT CONVERT(VARCHAR(10), GETDATE(), 103) AS ReportCreationDate,
'PSD006_713984__51' AS ReportIdentifier
FOR XML PATH('ReportDetails'), ROOT ('PSDFeedHeader'), TYPE
),
(
SELECT TOP 1 * FROM #Loans FOR XML PATH('ShortTermLoans'), TYPE
)
FOR XML RAW(''), ROOT('PSD006-ShortTermLoans'), ELEMENTS XSINIL;
这给出了下面的 XML,你可以看到我已经取得了一些进展,但是我在嵌套选择时遇到了困难。例如,Submitter 和 ReportDetails 节点应该嵌套在 PSDFeedHeader 节点中。
<PSD006-ShortTermLoans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<PSDFeedHeader>
<SubmittingFirm>
<Submitter>99999</Submitter>
</SubmittingFirm>
</PSDFeedHeader>
<PSDFeedHeader>
<ReportDetails>
<ReportCreationDate>24/09/2020</ReportCreationDate>
<ReportIdentifier>PSD006_713984__51</ReportIdentifier>
</ReportDetails>
</PSDFeedHeader>
<ShortTermLoans>
<Transref>11</Transref>
<TransactionDate>2020-06-22</TransactionDate>
<OriginalAdvance>300.0000</OriginalAdvance>
<LoanType>HCST</LoanType>
<ContractualAPR>7.9000000e+002</ContractualAPR>
<OriginalProjectedTotalRepayable>1000.0000</OriginalProjectedTotalRepayable>
<OriginalTerm>6</OriginalTerm>
<ReasonforLoan>HCST</ReasonforLoan>
<DOB>1999-01-31</DOB>
<Postcode>HG2 9DX</Postcode>
<Salary>20000</Salary>
<SalaryFrequency>1508</SalaryFrequency>
<ResidentialStatus>1486</ResidentialStatus>
<EmploymentStatus>470</EmploymentStatus>
</ShortTermLoans>
</PSD006-ShortTermLoans>
【问题讨论】:
-
不清楚你得到的两个
<Transref>元素如何适合所需的输出。请澄清。 -
我们正在向 FCA 提供贷款编号列表和相关详细信息。 Transref 是贷款编号,根据他们的 XML 示例,每个 Transref 都有一个
节点以及在 和 节点下的相关贷款元素。 -
在提出问题时,您需要提供一个可重现的最小示例。请参考以下链接:stackoverflow.com/help/minimal-reproducible-example 请提供以下内容: (1) DDL 和样本数据填充,即 CREATE table(s) 加上 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试实现它。 (3) 期望的输出,基于上面#1 中的样本数据。 (4) 你的 SQL Server 版本 (SELECT @@version;)
-
请使用单个模拟表来模拟上述(1)的所有连接
-
@YitzhakKhabinsky 到目前为止,我已经用示例数据和我的工作更新了这个问题。谢谢
标签: sql-server xml tsql xquery