2015-03-19 2 views
0

Я пытаюсь создать структурный XML-документ из моей временной таблицы. Таблица temp находится в следующем формате.Группировка XML-элементов в FOR XML-фразе

CREATE TABLE #Temp1 (Name Char(30), seqid integer, salary int); 
INSERT INTO #Temp1 VALUES('DEAL' ,123,6) 
INSERT INTO #Temp1 VALUES('DEAL' ,56,6) 
INSERT INTO #Temp1 VALUES('TRACNHE' ,1253,56) 
INSERT INTO #Temp1 VALUES('TRACNHE' ,5,65) 
INSERT INTO #Temp1 VALUES('ASSET' ,56,23) 

Я пытаюсь создать XML-формат в следующем виде:

<Response> 
<Deal> 
<seqid="123" salary="6" /> 
<seqid="56" salary="6" /> 
<Deal> 
<TRACNHE> 
<seqid="1253" salary="56"/> 
<seqid="5" salary="65"/> 
</TRACNHE> 
<ASSET> 
<seqid="56" salary="23"/> 
</ASSET> 
</Response> 

SELECT Name, (SELECT SEQID FROM #TEMP1 T WHERE T.Name = T1.Name) 
FROM (SELECT DISTINCT NAME FROM #TEMP1) T1 
FOR XML PATH('rEPONSE') 
DROP TABLE #Temp1 


DROP TABLE #Temp1 

Я попытался вышеупомянутый запрос, но говорит, что подзапрос возвращает более чем на 1 значение Могли бы вы дайте мне знать, какие Мне не хватает в этом запросе. Есть ли лучший способ справиться с этим сценарием.

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

ответ

0

на основе ваших требований, я вижу есть 2 вида сложности

  • Вы пытаетесь получить XML с сгруппированными элементами.
  • Для каждой группы пытаются создать XML-элемент с двумя атрибутами без имени собственного
    < seqid = "1253" зарплата = "56"/>
    вместо
    < сс seqid = "1253" зарплаты = "56"/>

просто смотреть на это ниже запрос, он может помочь

SELECT 
    (SELECT 
     seqid 'ss/@seqid' 
     , salary 'ss/@salary' 
     FROM Temp1 as t where t.Name = 'Deal' 
     FOR XML PATH('Deal') , TYPE 
    ) , 
    (SELECT 
     seqid 'ss/@seqid' 
     , salary 'ss/@salary' 
     FROM Temp1 as t where t.Name = 'TRACNHE' 
     FOR XML PATH('TRACNHE') , TYPE 
    ) , 
    (SELECT 
     seqid 'ss/@seqid' 
     , salary 'ss/@salary' 
     FROM Temp1 as t where t.Name = 'ASSET' 
     FOR XML PATH('ASSET') , TYPE 
    ) 
FOR XML PATH(''), ROOT('Response');