Sql 使用For XML嵌套子元素
我的示例数据和表模式如下所示Sql 使用For XML嵌套子元素,sql,sql-server,Sql,Sql Server,我的示例数据和表模式如下所示 CREATE TABLE [cs].[binary_fees]( [deal_id] [int] NULL, [fee_name] [varchar](255) NULL, [fee_type] [varchar](255) NULL, [fee_value] [float] NULL ) ON [PRIMARY] deal_id fee_name fee_type fee_val
CREATE TABLE [cs].[binary_fees](
[deal_id] [int] NULL,
[fee_name] [varchar](255) NULL,
[fee_type] [varchar](255) NULL,
[fee_value] [float] NULL
) ON [PRIMARY]
deal_id fee_name fee_type fee_value
82049956 Servicer Fees Total Pool 50
82049956 Trustee Fees Fixed Amount 0
823531463 Mgmt-Co-Fee Fixed Amount 51000
823531463 Custodian Fees Fixed Amount 5000
我正在尝试编写sql查询以获得以下xml输出:
<Fees>
<Fee dealId="82049956">
<FeeOverride fee_name="Servicer Fees" fee_type="Total Pool" fee_value="5.000000000000000e+001" />
<FeeOverride fee_name="Trustee Fees" fee_type="Fixed Amount" fee_value="0.000000000000000e+000" />
</Fee>
<Fee dealId="823531463">
<FeeOverride fee_name="Mgmt-Co-Fee" fee_type="Fixed Amount" fee_value="5.100000000000000e+004" />
<FeeOverride fee_name="Custodian Fees" fee_type="Fixed Amount" fee_value="5.000000000000000e+003" />
</Fee>
</Fees>
有没有更好的方法可以在SQLServer中获得相同的xml输出
感谢使用FOR XML EXPLICIT:
select distinct Tag = 1, Parent = 0,
[Fees!1!deal_id] = id.deal_id,
[FeeOverride!2!fee_name] = null, [FeeOverride!2!fee_type] = null, [FeeOverride!2!fee_value] = null
from #dealIdList id
union all
select Tag = 2, Parent = 1,
[Fees!1!deal_id] = bf.deal_id,
[FeeOverride!2!fee_name] = bf.fee_name,
[FeeOverride!2!fee_type] = bf.fee_type,
[FeeOverride!2!fee_value] = bf.fee_value
from #dealIdList id
join binary_fees bf on bf.deal_id = id.deal_id
order by 3, 1
for XML EXPLICIT, ROOT('Fee')
我使用了以下表格和数据
CREATE TABLE [binary_fees](
[deal_id] [int] NULL,
[fee_name] [varchar](255) NULL,
[fee_type] [varchar](255) NULL,
[fee_value] [float] NULL
) ON [PRIMARY]
insert into binary_fees values('82049956',' Servicer Fees','Total Pool',' 50'),
('82049956','Trustee Fees','Fixed Amount',' 0'),
('823531463','Mgmt-Co-Fee','Fixed Amount',' 51000'),
('823531463','Custodian Fees','Fixed Amount',' 5000')
create table #dealIdList ([deal_id] [int] NULL)
Insert into #dealIdList select distinct deal_id from binary_fees
使用FOR XML EXPLICIT:
select distinct Tag = 1, Parent = 0,
[Fees!1!deal_id] = id.deal_id,
[FeeOverride!2!fee_name] = null, [FeeOverride!2!fee_type] = null, [FeeOverride!2!fee_value] = null
from #dealIdList id
union all
select Tag = 2, Parent = 1,
[Fees!1!deal_id] = bf.deal_id,
[FeeOverride!2!fee_name] = bf.fee_name,
[FeeOverride!2!fee_type] = bf.fee_type,
[FeeOverride!2!fee_value] = bf.fee_value
from #dealIdList id
join binary_fees bf on bf.deal_id = id.deal_id
order by 3, 1
for XML EXPLICIT, ROOT('Fee')
我使用了以下表格和数据
CREATE TABLE [binary_fees](
[deal_id] [int] NULL,
[fee_name] [varchar](255) NULL,
[fee_type] [varchar](255) NULL,
[fee_value] [float] NULL
) ON [PRIMARY]
insert into binary_fees values('82049956',' Servicer Fees','Total Pool',' 50'),
('82049956','Trustee Fees','Fixed Amount',' 0'),
('823531463','Mgmt-Co-Fee','Fixed Amount',' 51000'),
('823531463','Custodian Fees','Fixed Amount',' 5000')
create table #dealIdList ([deal_id] [int] NULL)
Insert into #dealIdList select distinct deal_id from binary_fees