我正在尝试根据我的查询创建一个xml。我拥有的表结构是:
ReportDate Rating Currency Spreads
8/8/2014 B EUR 1.0 280
9/8/2014 A USD 2.0 220
10/8/2014 A USD 2.0 330
9/8/2014 B EUR 1.0 170
创建表格的脚本:
CREATE TABLE [dbo].[SampleTable](
[ReportDate] datetime,
[Rating] [nchar](2) NOT NULL,
[Currency] [varchar](50) NOT NULL,
[Spreads] [varchar](50) NOT NULL
)
GO
INSERT INTO Person VALUES (8/8/2014,'B','EUR 1.0','280');
INSERT INTO Person VALUES (9/8/2014,'A','USD 2.0',220);
INSERT INTO Person VALUES (10/8/2014,'A','USD 2.0','330');
INSERT INTO Person VALUES (9/8/2014,'B','EUR 2.0',170);
GO 我想输出的xml结构是:
<Spread_Series>
<Spreads Region="EURO 1.0" OrigRating="B">
<Spread Period="201408" AvgValue="280" />
<Spread Period="201209" AvgValue="170" />
</Spreads>
<Spreads Region="USD 2.0" OrigRating="A">
<Spread Period="201409" AvgValue="220" />
<Spread Period="201210" AvgValue="330" />
</Spreads>
</Spread_Series>
我使用的查询是:
SELECT
(SELECT distinct reportdate AS "@Period" ,spreads AS "@AvgValue"
FROM [cs].[spreads_clo]
for xml path('Spread'), TYPE)
FROM sampletable
FOR XML PATH('Spread_Series'), ROOT('Reponse')
我无法在输出中获取xml的这一部分:
<Spreads Region="EURO 1.0" OrigRating="B">
我的查询输出是:
<Spread_Series>
<Spreads>
<Spread Period="201408" AvgValue="280" />
<Spread Period="201209" AvgValue="170" />
</Spreads>
<Spreads>
<Spread Period="201409" AvgValue="220" />
<Spread Period="201210" AvgValue="330" />
</Spreads>
</Spread_Series>
如何按查询分组以获取xml结构?
答案 0 :(得分:0)
查询 -
DECLARE @t TABLE (
ReportDate DATETIME,
Rating NCHAR(2) NOT NULL,
Currency VARCHAR(50) NOT NULL,
Spreads VARCHAR(50) NOT NULL
)
INSERT INTO @t
VALUES
('20140808', 'B', 'EUR 1.0', '280')
, ('20140809', 'A', 'USD 2.0', '220')
, ('20140810', 'A', 'USD 2.0', '330')
, ('20140809', 'B', 'EUR 1.0', '170')
SELECT [@Region] = t1.Currency, [@OrigRating] = t1.Rating, (
SELECT DISTINCT [@Period] = ReportDate,
[@AvgValue] = Spreads
FROM @t t2
WHERE t1.Rating = t1.Rating
AND t2.Currency = t1.Currency
FOR XML PATH ('Spread'), TYPE
)
FROM (
SELECT DISTINCT Rating, Currency
FROM @t
) t1
FOR XML PATH ('Spread_Series')
输出 -
<Spread_Series Region="USD 2.0" OrigRating="A ">
<Spread Period="2014-08-09T00:00:00" AvgValue="220" />
<Spread Period="2014-08-10T00:00:00" AvgValue="330" />
</Spread_Series>
<Spread_Series Region="EUR 1.0" OrigRating="B ">
<Spread Period="2014-08-08T00:00:00" AvgValue="280" />
<Spread Period="2014-08-09T00:00:00" AvgValue="170" />
</Spread_Series>