Sql server 如何在一个XML节点中分组一对多数据-SQL Server
表之间存在一对多关系,一个检查器可以有许多文档,我喜欢按检查器id对它们进行分组,并在一个xmlSql server 如何在一个XML节点中分组一对多数据-SQL Server,sql-server,xml,sql-server-2008,Sql Server,Xml,Sql Server 2008,表之间存在一对多关系,一个检查器可以有许多文档,我喜欢按检查器id对它们进行分组,并在一个xml节点中显示它们 到目前为止,我已经尝试过了 SQL: select d.InspectorID "@InspectorID", d.DocID "Qualification/DocID", d.FileSize "Qualification/FileSize", q.Name "Qualification/Name", d.EndDate "Qua
节点中显示它们
到目前为止,我已经尝试过了
SQL:
select
d.InspectorID "@InspectorID",
d.DocID "Qualification/DocID",
d.FileSize "Qualification/FileSize",
q.Name "Qualification/Name",
d.EndDate "Qualification/EndDate",
d.DateCreated "Qualification/DateCreated"
from
InspectorDocs d
LEFT JOIN
DocumentType dt on dt.DocumentTypeID = d.DocType
LEFT JOIN
QualificationType q on q.QualificationTypeID = d.QualificationTypeID
WHERE
d.InspectorID = 6390
FOR XML PATH
<row InspectorID="6390">
<Qualification>
<DocID>23107</DocID>
<FileSize>248724</FileSize>
<Name>AWS CWI</Name>
<EndDate>2016-12-01T00:00:00</EndDate>
<DateCreated>2014-07-23T21:30:00</DateCreated>
</Qualification>
</row>
<row InspectorID="6390">
<Qualification>
<DocID>23108</DocID>
<FileSize>524934</FileSize>
<Name>Other</Name>
<EndDate>1900-12-12T00:00:00</EndDate>
<DateCreated>2014-07-23T21:31:00</DateCreated>
</Qualification>
</row>
XML输出:
select
d.InspectorID "@InspectorID",
d.DocID "Qualification/DocID",
d.FileSize "Qualification/FileSize",
q.Name "Qualification/Name",
d.EndDate "Qualification/EndDate",
d.DateCreated "Qualification/DateCreated"
from
InspectorDocs d
LEFT JOIN
DocumentType dt on dt.DocumentTypeID = d.DocType
LEFT JOIN
QualificationType q on q.QualificationTypeID = d.QualificationTypeID
WHERE
d.InspectorID = 6390
FOR XML PATH
<row InspectorID="6390">
<Qualification>
<DocID>23107</DocID>
<FileSize>248724</FileSize>
<Name>AWS CWI</Name>
<EndDate>2016-12-01T00:00:00</EndDate>
<DateCreated>2014-07-23T21:30:00</DateCreated>
</Qualification>
</row>
<row InspectorID="6390">
<Qualification>
<DocID>23108</DocID>
<FileSize>524934</FileSize>
<Name>Other</Name>
<EndDate>1900-12-12T00:00:00</EndDate>
<DateCreated>2014-07-23T21:31:00</DateCreated>
</Qualification>
</row>
23107
248724
AWS CWI
2016-12-01T00:00:00
2014-07-23T21:30:00
23108
524934
其他
1900-12-12T00:00:00
2014-07-23T21:31:00
我如何实现这一期望输出:
<row InspectorID="6390">
<Qualification>
<DocID>23107</DocID>
<FileSize>248724</FileSize>
<Name>AWS CWI</Name>
<EndDate>2016-12-01T00:00:00</EndDate>
<DateCreated>2014-07-23T21:30:00</DateCreated>
</Qualification>
<Qualification>
<DocID>23108</DocID>
<FileSize>524934</FileSize>
<Name>Other</Name>
<EndDate>1900-12-12T00:00:00</EndDate>
<DateCreated>2014-07-23T21:31:00</DateCreated>
</Qualification>
</row>
23107
248724
AWS CWI
2016-12-01T00:00:00
2014-07-23T21:30:00
23108
524934
其他
1900-12-12T00:00:00
2014-07-23T21:31:00
试试这个:
SELECT d1.InspectorID "@InspectorID"
, ( SELECT d.DocID "Qualification/DocID"
, d.FileSize "Qualification/FileSize"
, q.Name "Qualification/Name"
, d.EndDate "Qualification/EndDate"
, d.DateCreated "Qualification/DateCreated"
FROM InspectorDocs d
LEFT JOIN DocumentType dt ON dt.DocumentTypeID = d.DocType
LEFT JOIN QualificationType q ON q.QualificationTypeID = d.QualificationTypeID
WHERE d.InspectorID = d1.InspectorID
FOR
XML PATH
, TYPE
)
FROM ( SELECT DISTINCT
InspectorID
FROM InspectorDocs
) d1
WHERE d1.InspectorID = 6390
FOR XML PATH
下面的查询给出了您想要的结果。它使用单个表,但您可以根据需要调整它以适应表+连接
DECLARE @t TABLE(
InspectorID INT,
DocID INT,
FileSize INT,
Name VARCHAR(256),
EndDate DATETIME,
DateCreated DATETIME
);
INSERT INTO @t
(InspectorID,DocID,FileSize,Name,EndDate,DateCreated)
VALUES
(6390,23107,248724,'AWS CWI','2016-12-01T00:00:00','2014-07-23T21:30:00'),
(6390,23108,524934,'Other','1900-12-12T00:00:00','2014-07-23T21:30:00');
DECLARE @SelectedID INT=6390;
SELECT
@SelectedID "@InspectorID",
(
SELECT
t.DocID "Qualification/DocID",
t.FileSize "Qualification/FileSize",
t.Name "Qualification/Name",
t.EndDate "Qualification/EndDate",
t.DateCreated "Qualification/DateCreated"
FROM
@t AS t
WHERE
t.InspectorID=@SelectedID
FOR XML PATH(''), TYPE
)
FOR XML PATH, TYPE;
结果:
<row InspectorID="6390">
<Qualification>
<DocID>23107</DocID>
<FileSize>248724</FileSize>
<Name>AWS CWI</Name>
<EndDate>2016-12-01T00:00:00</EndDate>
<DateCreated>2014-07-23T21:30:00</DateCreated>
</Qualification>
<Qualification>
<DocID>23108</DocID>
<FileSize>524934</FileSize>
<Name>Other</Name>
<EndDate>1900-12-12T00:00:00</EndDate>
<DateCreated>2014-07-23T21:30:00</DateCreated>
</Qualification>
</row>
23107
248724
AWS CWI
2016-12-01T00:00:00
2014-07-23T21:30:00
23108
524934
其他
1900-12-12T00:00:00
2014-07-23T21:30:00