В следующий раз было бы здорово добавить расходные данные испытаний, лучше всего было бы автономно sceanrio , прочитав о MCVE .Я сделал это для вас, предоставив макетные таблицы.
Попробуйте это так:
DECLARE @mockEncounters TABLE(MedicalRecordNumber VARCHAR(100),DischargeDate DATE,PrimaryProcedure VARCHAR(100));
INSERT INTO @mockEncounters VALUES('21QWYZ12345ABC','20180601','P01198');
DECLARE @mockJHHSProcedures TABLE(MedicalRecordNumber VARCHAR(100),DisDate DATE,ProcedureCode VARCHAR(100));
INSERT INTO @mockJHHSProcedures VALUES('21QWYZ12345ABC','20180601','P03245')
,('21QWYZ12345ABC','20180601','P05624');
- запрос довольно близок к вашему, но прочитайте мои советы ниже:
SELECT
Encounters.MedicalRecordNumber,
Encounters.DischargeDate,
Encounters.PrimaryProcedure AS [Procedures/PrincipalProcedure],
(SELECT
JHHSProcedures.ProcedureCode AS OtherProcedure
FROM
@mockJHHSProcedures AS JHHSProcedures
WHERE
JHHSProcedures.MedicalRecordNumber = Encounters.MedicalRecordNumber
and JHHSProcedures.DisDate = Encounters.DischargeDate
FOR XML PATH(''), TYPE) AS [Procedures]
FROM
@mockEncounters AS Encounters
FOR XML PATH('record');
Результат
<record>
<MedicalRecordNumber>21QWYZ12345ABC</MedicalRecordNumber>
<DischargeDate>2018-06-01</DischargeDate>
<Procedures>
<PrincipalProcedure>P01198</PrincipalProcedure>
<OtherProcedure>P03245</OtherProcedure>
<OtherProcedure>P05624</OtherProcedure>
</Procedures>
</record>
С этой строкой
Encounters.PrimaryProcedure AS [Procedures/PrincipalProcedure],
... вы говорите движку: «Откройте элемент <Procedures>
и добавьтеэлемент <PrincipalProcedure>
.
Подвыбор вызывает каждый выход AS OtherProcedure
с пустым PATH('')
, что приводит к выполнению в одиночку к этому:
<OtherProcedure>P03245</OtherProcedure>
<OtherProcedure>P05624</OtherProcedure>
TYPE
будет сохранять это как собственный XML и этот AS [Procedure]
. Движок видит, что этот элемент уже открыт, нет необходимости открывать другой. Таким образом, все это помещается в текущий элемент.