Putting mutliple Felder in einen Feldnamen mit SQL für XML

Problem: Ich möchte die mehr data, die von der "Gruppe" in dem übergeordneten XML-Feld, das die anderen, untergeordneten Felder umfasst, wahr sind.

Abfrage: Kann ich Details bündeln, die in einem Feld gleich sind, um filegröße und Importzeit zu speichern.

<ParentField Field1="1" Field2="X" Field3="SomeText"> 

Darüber hinaus ist das, was ich versuche, gute Praxis zu machen oder sollte ich behalten, was ich habe

Einige Felder, oben auf der UPRN, wie data, wie auch in der Lage, in einen übergeordneten Wert gehen. Ich habe Code wie folgt gesehen:

Mit dem SQL-Code habe ich, wie kann ich das ändern? (Snippet unten)

 USE DATABASE SELECT e.GroupFieldName, (SELECT c.ShouldBeParent AS ShouldBeParent ,c.ChildIsOkayHere AS ChildIsOkayHere FROM TblTableC c WHERE c.GroupFieldName = e.GroupFieldName FOR XML PATH('LineItem'), type ) FROM TblTableE e JOIN TblTableC c ON e.GroupFieldName = c.UPRN GROUP BY e.UPRN FOR XML PATH('GroupFieldName') , ROOT ('SURVEYDATA') 

Beispiel (was ich habe):

 <SURVEYDATA> <UPRN_GROUP> <UPRN>SH1001</UPRN> <CHILD> <Field1>Some Text </Field1> </CHILD> <CHILD> <Field1>Some Other Text </Field1> </CHILD> </UPRN_GROUP> <UPRN_GROUP> <UPRN>SH1001</UPRN> <CHILD> <Field1>Some Text </Field1> </CHILD> <CHILD> <Field1>Some Other Text </Field1> </CHILD> </UPRN_GROUP> </SURVEYDATA> 

Ich denke, du musst deine Lösung selbst finden, da du nicht genug Informationen hast. Lesen Sie über FOR XML PATH.

Im Folgenden finden Sie eine Reihe von Aussagen zu spielen. Kopiere sie in ein leeres Abfragefenster und führt sie aus. Schau vor allem auf die Art, wie ich die Spalten benannt habe. Namen mit "@" werden Attribute, "reine" Namen werden Elemente sein.

 DECLARE @tbl TABLE(id INT, Caption VARCHAR(100)); INSERT INTO @tbl VALUES(1,'Caption 1'),(2,'Caption 2'),(3,'Caption 3'); DECLARE @tblChildren TABLE(id INT,ParentId INT,Caption VARCHAR(100)); INSERt INTO @tblChildren VALUES(1,1,'Caption 1.1'),(2,1,'Caption 1.2'),(3,1,'Caption 1.3') ,(4,2,'Caption 2.1'),(5,2,'Caption 2.2') ,(6,3,'Caption 3.1'); --Simple SELECT SELECT tbl.id AS ParentId ,tbl.Caption AS ParentCaption ,ch.id AS ChildId ,ch.Caption AS ChildCaption FROM @tbl AS tbl INNER JOIN @tblChildren AS ch ON tbl.id=ch.ParentId; --XML with elements and attributes (play around with this...) --Children are not nested... SELECT tbl.Caption AS [Parent/@Caption] ,tbl.id AS [Parent/@Id] ,ch.Caption AS [Child/@Caption] ,ch.id AS [Child/@Id] FROM @tbl AS tbl INNER JOIN @tblChildren AS ch ON tbl.id=ch.ParentId FOR XML PATH('row'),ROOT('root'); --XML with elements and attributes (play around with this...) --Children are blocked... SELECT tbl.Caption AS [Parent/@ParentCaption] ,tbl.id AS [Parent/@Id] ,(SELECT id AS [@id] ,Caption AS [@Caption] FROM @tblChildren WHERE ParentId=tbl.id FOR XML PATH('Child'),ROOT('Children'),TYPE ) FROM @tbl AS tbl FOR XML PATH('row'),ROOT('root'); --XML with elements and attributes (play around with this...) --Children are nested... --No row-tag needed, as everything is nested SELECT tbl.Caption AS [Parent/@ParentCaption] ,tbl.id AS [Parent/@Id] ,(SELECT id AS [@id] ,Caption AS [@Caption] FROM @tblChildren WHERE ParentId=tbl.id FOR XML PATH('Child'),TYPE ) AS [Parent/Children] FROM @tbl AS tbl FOR XML PATH(''),ROOT('root');