T-SQL XML: как мне получить результаты в формате, указанном ниже? - PullRequest
0 голосов
/ 13 июня 2018

Это мой первый раз здесь.Мне нужно отформатировать мой XML в следующем формате:

<Summary Year="2018" QtrNum="1" WeekNum="4" Date="1/22/2018" Code="101">

Как только я получу его в этом формате, мне понадобится этот XML, сгенерированный для каждой строки моей таблицы.Вот скриншот ожидаемого набора результатов.

Ожидаемый набор результатов

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Мне удалось решить мою проблему.Посмотрите на сценарий ниже.

drop table #test
create table #test(id int identity(1,1),locationcode varchar(6),businessdate date, quarternum int, weeknum int)

insert into #test(locationcode,businessdate, quarternum, weeknum)
values('000001',GETDATE(),2,2),
('000001',GETDATE(),2,2),
('000002',GETDATE(),2,2),
('000003',GETDATE(),2,2),
('000004',GETDATE(),2,2),
('000005',GETDATE(),2,2),
('000006',GETDATE(),2,2),
('000007',GETDATE(),2,2)

SELECT 
    (SELECT YEAR(b.businessdate) AS '@Year',b.QuarterNum AS '@QtrNum',b.WeekNum AS '@WeekNum',FORMAT(b.BusinessDate,'MM/DD/YYYY') AS '@Date'
                ,b.LocationCode  AS '@Code' 
     FROM #test c where b.id = c.id FOR XML PATH('DailySummary'),TYPE) AS Row
FROM #test b
0 голосов
/ 13 июня 2018

Хотя ваш вопрос довольно неясен, мой магический хрустальный шар говорит мне, что вы можете искать что-то вроде этого:

DECLARE @someTable TABLE(SomeDate DATE, SomeQrt INT, SomeWeek INT, SomeCode INT);
INSERT INTO @someTable VALUES('20180122',1,4,101);

DECLARE @SomeRelatedTable TABLE(SomeText VARCHAR(100),SomeCode INT);
INSERT INTO @SomeRelatedTable VALUES('Row 1',101)
                            ,('Row 2',101)
                            ,('Other code',999);

SELECT YEAR(t.SomeDate) AS [@Year]
      ,t.SomeQrt AS [@QrtNum]
      ,t.SomeWeek AS [@WeekNum]
      ,t.SomeDate AS [@Date]
      ,t.SomeCode AS [@Code]
      ,(
        SELECT SomeText AS [@InnerText]
        FROM @SomeRelatedTable rt
        WHERE rt.SomeCode=t.SomeCode
        FOR XML PATH('InnerNode'),TYPE
       )
FROM @someTable t           
FOR XML PATH('Summary');

Результат

<Summary Year="2018" QrtNum="1" WeekNum="4" Date="2018-01-22" Code="101">
  <InnerNode InnerText="Row 1" />
  <InnerNode InnerText="Row 2" />
</Summary>           

Некоторое объяснение

FOR XML PATH обеспечивает полный контроль над генерацией XML через псевдоним столбца и расширение PATH / ROOT.

Связанные (внутренние) узлы создаются с помощью коррелированного подзапроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...