Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用For XML嵌套子元素_Sql_Sql Server - Fatal编程技术网

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