I have the following XML:
DECLARE @Temp XML =
'<SurveyQLADetails xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<FirstName>Jacal</FirstName>
<LastName>Duardo</LastName>
<PhoneNumber>7868256998</PhoneNumber>
<Email>Duardo</Email>
<SFId>00Q6R00001XWHWHUA5</SFId>
<ClubNumber>7446</ClubNumber>
<QLAList>
<QLADetailsModel>
<QuestionId>1</QuestionId>
<OptionId>2</OptionId>
<AnswerName xsi:type="xsd:string">Gain strength</AnswerName>
<QuestionsTypeName>Fitness_Goals</QuestionsTypeName>
</QLADetailsModel>
<QLADetailsModel>
<QuestionId>2</QuestionId>
<OptionId xsi:nil="true" />
<AnswerName xsi:type="xsd:boolean">true</AnswerName>
<QuestionsTypeName>Achieve_Fitness_Goals</QuestionsTypeName>
</QLADetailsModel>
<QLADetailsModel>
<QuestionId>3</QuestionId>
<OptionId>9</OptionId>
<AnswerName xsi:type="xsd:string">3-6 months</AnswerName>
<QuestionsTypeName>Timeline_achieve_goals</QuestionsTypeName>
</QLADetailsModel>
<QLADetailsModel>
<QuestionId>4</QuestionId>
<OptionId xsi:nil="true" />
<AnswerName xsi:type="xsd:boolean">false</AnswerName>
<QuestionsTypeName>Personal_Trainer</QuestionsTypeName>
</QLADetailsModel>
<QLADetailsModel>
<QuestionId>5</QuestionId>
<OptionId>15</OptionId>
<AnswerName xsi:type="xsd:string">Health reasons (doctor recommendation)</AnswerName>
<QuestionsTypeName>Motivation_achieving_goals</QuestionsTypeName>
</QLADetailsModel>
<QLADetailsModel>
<QuestionId>6</QuestionId>
<OptionId>19</OptionId>
<AnswerName xsi:type="xsd:string">3</AnswerName>
<QuestionsTypeName>Importance_Goals</QuestionsTypeName>
</QLADetailsModel>
<QLADetailsModel>
<QuestionId>7</QuestionId>
<OptionId>29</OptionId>
<AnswerName xsi:type="xsd:string">6 months or more</AnswerName>
<QuestionsTypeName>Length__thought_goals</QuestionsTypeName>
</QLADetailsModel>
<QLADetailsModel>
<QuestionId>8</QuestionId>
<OptionId xsi:nil="true" />
<AnswerName xsi:type="xsd:boolean">false</AnswerName>
<QuestionsTypeName>Anything_stopping_you_from_starting</QuestionsTypeName>
</QLADetailsModel>
<QLADetailsModel>
<QuestionId>8.1</QuestionId>
<OptionId xsi:nil="true" />
<AnswerName xsi:type="xsd:boolean">false</AnswerName>
<QuestionsTypeName>Support_friends_family</QuestionsTypeName>
</QLADetailsModel>
<QLADetailsModel>
<QuestionId>9</QuestionId>
<OptionId>38</OptionId>
<AnswerName xsi:type="xsd:string">3+ per week</AnswerName>
<QuestionsTypeName>Gym_Visits</QuestionsTypeName>
</QLADetailsModel>
<QLADetailsModel>
<QuestionId>10</QuestionId>
<OptionId>42</OptionId>
<AnswerName xsi:type="xsd:string">Evening</AnswerName>
<QuestionsTypeName>What_time_of_the_day</QuestionsTypeName>
</QLADetailsModel>
<QLADetailsModel>
<QuestionId>11</QuestionId>
<OptionId xsi:nil="true" />
<AnswerName xsi:type="xsd:boolean">true</AnswerName>
<QuestionsTypeName>Visit_other_locations</QuestionsTypeName>
</QLADetailsModel>
<QLADetailsModel>
<QuestionId>12</QuestionId>
<OptionId>46</OptionId>
<AnswerName xsi:type="xsd:string">HIIT or small group training</AnswerName>
<QuestionsTypeName>Amenities_Important</QuestionsTypeName>
</QLADetailsModel>
<QLADetailsModel>
<QuestionId>13</QuestionId>
<OptionId xsi:nil="true" />
<AnswerName xsi:type="xsd:boolean">true</AnswerName>
<QuestionsTypeName>Nutrition_Plan</QuestionsTypeName>
</QLADetailsModel>
<QLADetailsModel>
<QuestionId>14</QuestionId>
<OptionId xsi:nil="true" />
<AnswerName xsi:type="xsd:boolean">false</AnswerName>
<QuestionsTypeName>Meal_Plan</QuestionsTypeName>
</QLADetailsModel>
<QLADetailsModel>
<QuestionId>15</QuestionId>
<OptionId xsi:nil="true" />
<OtherAnswerName>
<OtherAnswerDetails>
<FriendsName>t</FriendsName>
<FriendsPhoneNo>t</FriendsPhoneNo>
</OtherAnswerDetails>
<OtherAnswerDetails>
<FriendsName>t</FriendsName>
<FriendsPhoneNo>t</FriendsPhoneNo>
</OtherAnswerDetails>
</OtherAnswerName>
</QLADetailsModel>
</QLAList>
</SurveyQLADetails>'
I want output as below without using CROSS APPLY
on SQL Server.
I have tried below query it shows the same output but I don't want to use CROSS APPLY
:
SELECT s.l.value('(FirstName/text())[1]', 'VARCHAR(250)') AS FirstName,
s.l.value('(LastName/text())[1]', 'VARCHAR(250)') AS LastName,
s.l.value('(PhoneNumber/text())[1]', 'VARCHAR(250)') AS PhoneNumber,
s.l.value('(Email/text())[1]', 'VARCHAR(250)') AS Email,
s.l.value('(SFId/text())[1]', 'VARCHAR(250)') AS SFId,
s.l.value('(ClubNumber/text())[1]', 'VARCHAR(250)') AS ClubNumber,
QLAList.QLADetailsModel.value('(./QuestionId)[1]', 'VARCHAR(MAX)') AS QuestionId,
QLAList.QLADetailsModel.value('(./OptionId)[1]', 'VARCHAR(MAX)') AS OptionId,
QLAList.QLADetailsModel.value('(./AnswerName)[1]', 'VARCHAR(MAX)') AS AnswerName,
QLAList.QLADetailsModel.value('(./OtherAnswerName/OtherAnswerDetails/FriendsName)[1]', 'VARCHAR(MAX)') AS FriendsName,
QLAList.QLADetailsModel.value('(./OtherAnswerName/OtherAnswerDetails/FriendsPhoneNo)[1]', 'VARCHAR(MAX)') AS FriendsPhoneNo,
QLAList.QLADetailsModel.value('(./QuestionsTypeName)[1]', 'VARCHAR(MAX)') AS QuestionsTypeName
FROM @Temp.nodes('(/SurveyQLADetails/QLAList/QLADetailsModel)') AS QLAList(QLADetailsModel)
CROSS APPLY @Temp.nodes('/SurveyQLADetails') s(l)
Output that I want without using CROSS APPLY
Is there any query that does not use WHERE
and does not use CROSS APPLY
?