SELECT
consent_type, state_code,
suburb, sex_code, postcode,
CarerPrimary, CarerResidence, CarerRelationship,
service_type_outlet_codeno,
last_service_date, service_hours,
to_date, from_date
FROM
TABLEX
Wie kann ich das folgende XML-Format von dieser einzelnen Tabelle erhalten? Am verwirrendsten ist CarerPrimary
, CarerResidence
, CarerRelationship
Teil. Diese Tabelle enthält Informationen von mehreren Clients, sodass service_user
Teil für jeden Client einmal angezeigt wird. Vielen Dank.Mehrere XML-Format von SQL Server-Einzeltabelle
<agency>
<service_user consent_type="1" state_code="2" suburb="Croydon" sex_code="1" postcode="3136">
<service_user_response value="1" question_fieldname="CarerPrimary"/>
<service_user_response value="1" question_fieldname="CarerResidence"/>
<service_user_response value="9" question_fieldname="CarerRelationship"/>
<service_user_outlet service_type_outlet_codeno="8376784" last_service_date="02/9/2016" >
<service_hours service_hours="240" to_date="15/8/2016" from_date="09/8/2016"/>
<service_hours service_hours="90" to_date="02/9/2016" from_date="02/9/2016"/>
</service_user_outlet>
</service_user>
<service_user .... >
</service_user>
</agency>
Neuer Code,
SELECT PostalCode AS [@Postcode]
,IIF (HC.HasCarer = 'true', 'Y', 'N') as [@has_carer_type]
,convert(date, [BirthDate], 111) AS [@BirthDate]
,'N' as [@birth_date_est_ind]
,IIF (new_gender = 6, 3, new_gender) AS [@sex_code]
--SLK
,City AS [@Suburb]
,DEX.[dbo].[CRM2DEX]('State',[new_Address1State], 0) AS [@StateCode]
,'Y' as [@consent_type]
--,CONCAT ([FirstName], ' ' + [MiddleName]) AS GivenName
-- ,[LastName] AS FamilyName
-- ,cb.new_ClientID AS ClientId
/********service_user_response*******/
,HC.CarerPrimary AS [service_user_response/@value]
,'CarerPrimary' AS [service_user_response/@question_fieldname]
,HC.CarerResidence AS [service_user_response/@value]
,'CarerResidence' AS [service_user_response/@question_fieldname]
,dex.dbo.CRM2QDC('Relationship', default, HC.new_Relationship) AS [service_user_response/@value]
,'CarerRelationship' AS [service_user_response/@question_fieldname]
--,IIF (new_CarerAgeGroup IS NULL, 99, new_CarerAgeGroup) AS CarerAgeGroup
,IIF (new_indigenoustatus = 9, NULL, new_indigenoustatus) AS [service_user_response/@value]
,'IndigenousStatus' AS [service_user_response/@question_fieldname]
,COALESCE (Country.[new_Code], '0003') AS [service_user_response/@value]
,'BirthCountry' AS [service_user_response/@question_fieldname]
,COALESCE (Lang.[new_Code], '0002') AS [service_user_response/@value]
,'Language' AS [service_user_response/@question_fieldname]
,new_interpreter AS [service_user_response/@value]
,'InterpreterServices' AS [service_user_response/@question_fieldname]
,new_communicationmethod AS [service_user_response/@value]
,'CommunicationMethod' AS [service_user_response/@question_fieldname]
,IIF (cb.new_livingarrangements = 9, 99, cb.new_livingarrangements) AS [service_user_response/@value]
,'LivingArrangements' AS [service_user_response/@question_fieldname]
,cb.new_residentialsetting AS [service_user_response/@value]
,'ResidentialSetting' AS [service_user_response/@question_fieldname]
,new_employmentstatus AS [service_user_response/@value]
,'LabourForceStatus' AS [service_user_response/@question_fieldname]
,IIF (new_primaryincomesource = 7, 97, new_primaryincomesource) AS [service_user_response/@value]
,'IncomeSource' AS [service_user_response/@question_fieldname]
--,(SELECT IIF (Disability IS NULL, 'false', 'true') from HasDisablity where ClientID = CB.ContactId) AS HasDisabilities
--,IIF (new_client is NULL, NULL, (select coalesce (new_name, null) FROM Health AS D where D.new_contact = CB.ContactId for xml path ('DisabilityCode'), type)) AS Disabilities
--,(SELECT IIF (new_name IS NULL, NULL, (select H2.new_name from Health AS H2 where H2.new_contact = CB.ContactId
-- for xml path ('DisabilityCode'), type)) FROM Health AS D where D.new_contact = CB.ContactId) AS Disabilities
-- ,DEX.[dbo].[CRM2DEX]('AccommodationType',C.new_residentialsetting, 0) AS AccommodationTypeCode
-- ,DEX.[dbo].[CRM2DEX]('DVACardStatus',[new_DVAentitlement], 0) AS DVACardStatusCode
--,COALESCE (HasCarer, 'false') AS HasCarer
-- ,DEX.[dbo].[CRM2DEX]('HouseholdComposition', C.new_livingarrangements, 0) AS HouseholdCompositionCode
FROM [FOCUSCRM_MSCRM].[dbo].[ContactBase] AS CB
INNER JOIN
(SELECT [ParentId]
,[Line1]
,[Line2]
,[City]
,[PostalCode]
FROM [FOCUSCRM_MSCRM].[dbo].[CustomerAddressBase]
WHERE addressNumber = 1) AS A ON CB.ContactId = A.ParentId
LEFT OUTER JOIN
(SELECT [new_countryId]
,[new_name]
,[new_Code]
FROM [FOCUSCRM_MSCRM].[dbo].[new_countryBase]) AS Country ON CB.new_CountryofBirth = Country.new_countryId
LEFT OUTER JOIN
(SELECT [new_languageId]
,[new_name]
,[new_Code]
FROM [FOCUSCRM_MSCRM].[dbo].[new_languageBase]) AS Lang ON CB.new_PreferredLanguage = Lang.new_languageId
LEFT OUTER JOIN
(SELECT new_ClientName, new_livingarrangements, new_residentialsetting
FROM (
SELECT [new_ClientName]
,row_number() over (Partition by new_ClientName ORDER BY ModifiedOn DESC) AS R
,new_AssessmentDate
,new_livingarrangements
,new_residentialsetting
FROM [FOCUSCRM_MSCRM].[dbo].[new_assessmentBase] AS AB1
WHERE statecode = 0
) AS T1
WHERE R = 1) AS C ON CB.ContactId = C.new_ClientName
LEFT OUTER JOIN HasCarer AS HC ON HC.new_clientname = cb.contactID
WHERE CB.new_clientID IN (SELECT DISTINCT new_clientID from TS)
and statecode = 0
--) AS T GROUP BY ClientID having count(ClientId)>1
FOR XML PATH('service_user'),ROOT('agency');
Dank @Shnugo. Sie haben recht mit service_hours. Es ist 1: n. Bitte werfen Sie einen Blick auf meine neue Abfrage, die mir einen Fehler gibt. Die Joins sind einige Tabellen und einige CTE. Der Spaltenname 'service_user_response/@ value' wird wiederholt. Das gleiche Attribut kann nicht mehrmals auf demselben XML-Tag generiert werden. – MohammedS
@MohammedS Bitte versuchen Sie, den Code auf das erforderliche Minimum zu reduzieren ... Wenn die Frage ist, wie man einen verschachtelten '1: n'-bezogenen Unterknoten erzeugt, fügen Sie einfach ein' (SELECT ... FROM ... WO ... Für XML PATH ('xyz'), TYPE) AS [*] 'an der entsprechenden Stelle. Die Unterauswahl muss die WHERE-Klausel verwenden, um die Anpassungszeilen zu filtern. Und bitte vermeide Chamäleonfragen! – Shnugo
Danke @Shnugo. Unterknoten ist nicht das Problem. Mein Problem war, wie man Wert und question_fieldname aus Spalten darstellt. Ich habe Ihren Code ausprobiert, aber er klagt, da der Spaltenname 'service_user_response/@ value' wiederholt wird. Das gleiche Attribut kann nicht mehr als einmal auf demselben XML-Tag generiert werden. " Wie behebe ich dieses Problem? – MohammedS