Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 запрос в xml  [new]
Volodya
Member

Откуда:
Сообщений: 450
Доброго времени суток!
Требуется выгрузить результат запроса в xml вот так:

<?xml version="1.0"?>

-<DocumentCollection>


-<Document>


-<Visit Doc="5" End="13:50:48" Start="13:45:42" Date="2012-01-24" UN="11580" CN="516004315">


-<Merch>


-<Pos PosT="DP" PosN="1">

<Param Value="45" SC="SLT_GUM"/>

<Param Value="20" SC="SLT_CONF"/>

<Param Value="45" SC="FSLT_GUM"/>

<Param Value="20" SC="FSLT_CONF"/>

<Param Value="1" SC="PLGR_PLGR"/>

</Pos>

</Merch>


</Visit>

</Document>

</DocumentCollection>



я сделал заготовку для выгрузки

SELECT 
DocID as [Visit/@Doc] , CONVERT(varchar(8), VisitEndDate, 108) as [Visit/@End], CONVERT(varchar(8), VisitStartDate, 108) as [Visit/@Start]
, convert(varchar(10), visitDate, 105) as [Visit/@Date], agentID as [Visit/@UN], clientID as [Visit/@CN]
, (select (select SpAnswer from #answersdocs t where t.docid = #visitsdocs.docid and qstid = 2) as [Pos/@PosT], 
	(select SpAnswer from #answersdocs t where t.docid = #visitsdocs.docid and qstid = 1) as [Pos/@PosN]
	,(select SpAnswer from #answersdocs t where t.docid = #visitsdocs.docid and qstid = 3) as [Pos/Param/@Value]
	,(select VendorCode from #answersdocs t where t.docid = #visitsdocs.docid and qstid = 3) as [Pos/Param/@SC]
	for xml path(''), root ('Merch'), type)
FROM #visitsdocs
for xml path('Document'), root('DocumentCollection'), type


вот только вопросов qstid у меня в запросе около 150 - не хотелось бы для каждого qstid писать отдельную строку в запросе...
что нужно добавить/убавить в запросе, чтобы выгружались все qstid, причем не пришлось бы их все указывать явно ?
17 мар 15, 17:07    [17395752]     Ответить | Цитировать Сообщить модератору
 Re: запрос в xml  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
ну, начнем с того, что в том виде, в котором вы хотите, этот запрос данные не выдаст: не будет нескольких Param в Pos.

если разным qstid соответствуют разные теги/атрибуты (с разными именами), то никак вы от прописывания их явно не уйдете. если только уже сам запрос динамически строить.
17 мар 15, 17:24    [17395851]     Ответить | Цитировать Сообщить модератору
 Re: запрос в xml  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
daw
ну, начнем с того, что в том виде, в котором вы хотите, этот запрос данные не выдаст: не будет нескольких Param в Pos.

если разным qstid соответствуют разные теги/атрибуты (с разными именами), то никак вы от прописывания их явно не уйдете. если только уже сам запрос динамически строить.


Да как нефиг делать выдаст простейшим for xml auto

SELECT Pos.*, [Param].*
FROM 
	(SELECT PosT='DP', PosN='1') Pos , 
	(
		SELECT Value='45', SC='SLT_GUM'UNION ALL 
		SELECT Value='20', SC='SLT_CONF'UNION ALL 
		SELECT Value='45', SC='FSLT_GUM'UNION ALL 
		SELECT Value='20', SC='FSLT_CONF'UNION ALL 
		SELECT Value='1' ,SC='PLGR_PLGR'
	) [Param]

FOR XML AUTO
17 мар 15, 19:13    [17396332]     Ответить | Цитировать Сообщить модератору
 Re: запрос в xml  [new]
Volodya
Member

Откуда:
Сообщений: 450
Добрый день!
немного изменился требуемый вид результата:
<Merch>
-<Pos PosT="DP" PosN="1">
  <Param SC="SLT_GUM" Presence="0" FS="0" А0="0" Amount="45" />
  <Param SC="SLT_CONF" Presence="0" FS="0" А0="0" Amount="24" />
  <Param SC="SLT_GUM_A0" Presence="0" FS="0" А0="0" Amount="0" />
  <Param SC="SLT_CONF_A0" Presence="0" FS="0" А0="0" Amount="0" />
  <Param SC="COMP_SLT_GUM" Presence="0" FS="0" А0="0" Amount="0" />
  <Param SC="COMP_SLT_CONF" Presence="0" FS="0" А0="0" Amount="0" />


с помощью такого запроса :
SELECT 
		t.VendorCode as [Param/@SC], case PR when 'Y' then 1 else '' end as [Param/@Presence]
			, case FS when 'Y' then 1 else '' end as [Param/@FS], case А0 when 'Y' then 1 else '' end as [Param/@А0] 
			, case when t.VendorCode in ('SLT_GUM','SLT_CONF','SLT_GUM_A0','SLT_CONF_A0','COMP_SLT_GUM','COMP_SLT_CONF') 
				then SpAnswer else 0 end as [Param/@Amount]
		from #answersdocs t
		where t.docid = 677911 and t.qstid not in (1,2)
		FOR XML path(''), root('Merch'), type


получаю
<Merch>
  <Param SC="SLT_GUM" Presence="0" FS="0" А0="0" Amount="45" />
  <Param SC="SLT_CONF" Presence="0" FS="0" А0="0" Amount="24" />
  <Param SC="SLT_GUM_A0" Presence="0" FS="0" А0="0" Amount="0" />
  <Param SC="SLT_CONF_A0" Presence="0" FS="0" А0="0" Amount="0" />
  <Param SC="COMP_SLT_GUM" Presence="0" FS="0" А0="0" Amount="0" />
  <Param SC="COMP_SLT_CONF" Presence="0" FS="0" А0="0" Amount="0" />


вопрос - что добавить в запрос, чтобы в результат попала и эта строка ?
-<Pos PosT="DP" PosN="1">


в качестве значений туда подставляются значения при t.qstid in (1,2)
18 мар 15, 15:47    [17400438]     Ответить | Цитировать Сообщить модератору
 Re: запрос в xml  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Volodya,

Вам сюда https://msdn.microsoft.com/en-us/library/ms189068.aspx на RTFM
18 мар 15, 15:55    [17400491]     Ответить | Цитировать Сообщить модератору
 Re: запрос в xml  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
Volodya,

> вопрос - что добавить в запрос, чтобы в результат попала и эта строка ?

его переписать надо, а не дописать. запрос, формирующий Param будет подзапросом для запроса, формирующего Pos.
18 мар 15, 15:58    [17400511]     Ответить | Цитировать Сообщить модератору
 Re: запрос в xml  [new]
Volodya
Member

Откуда:
Сообщений: 450
следующий код :
if OBJECT_ID('tempdb..#visitsdocs') is not null	drop table #visitsdocs
create table #visitsdocs
	(visitid int, agentid int, clientid int, visitdate smalldatetime, visitstartdate smalldatetime, visitenddate smalldatetime,
		uploaddate smalldatetime, docid int,  primary key (visitid, docid)
	)

insert #visitsdocs values (1, 512, 256, '20150303', '20150303 10:00', '20150303 10:30', '20150303 10:40', 515)
insert #visitsdocs values (2, 513, 562, '20150303', '20150303 11:00', '20150303 11:30', '20150303 11:40', 516)

--select * from #visitsdocs


if OBJECT_ID('tempdb..#answersdocs') is not null	drop table #answersdocs
create table #answersdocs
	(docid int, qstid bigint, SpAnswer varchar(5), VendorCode varchar(50)
		, FS varchar(5), PR varchar(5), А0 varchar(5), primary key (docid, qstid)
	)

insert #answersdocs values (515, 1, 'Y', 'XXX', '', '', '')
insert #answersdocs values (515, 2, 'N', 'YYY', '', '', '')
insert #answersdocs values (515, 3, 'n', 'ZZZ', 'A', 'B', 'C')
insert #answersdocs values (516, 1, 'N', 'XXX', '', '', '')
insert #answersdocs values (516, 2, 'N', 'YYY', '', '', '')
insert #answersdocs values (516, 3, 'N', 'ZZZ', 'A', 'B', 'C')

--select * from #answersdocs

select	1 as Tag,	NULL as Parent,	NULL as [DocumentCollection!1!root]
	,	NULL as [Document!2],	NULL as [Visit!3!Doc],	NULL as [Visit!3!End]
	,	NULL as [Visit!3!Start],NULL as [Visit!3!Date],	NULL as [Visit!3!UN]
	, 	NULL as [Visit!3!CN],	NULL as [SAReport!4],	NULL as [Pos!5!PosT]
	,	NULL as [Pos!5!PosN]
UNION all
select	2 ,	1 ,	NULL 
		,	NULL ,	NULL , NULL 
		,	NULL ,	NULL ,	NULL 
		,NULL, NULL , NULL 
		, NULL
UNION all
SELECT 
	3,	2,	NULL
	,NULL,	docid as [Visit!3!Doc],	CONVERT(varchar(8), VisitEndDate, 108) as [Visit!3!End],	
	CONVERT(varchar(8), VisitStartDate, 108) as [Visit!3!Start],	convert(varchar(10), visitDate, 105) as [Visit!3!Date], 	agentID as [Visit!3!UN], 	
	clientID as [Visit!3!CN] ,NULL, NULL 
	, NULL
	from #visitsdocs
UNION all
SELECT 
	4,	3,	NULL
	,NULL,	docid as [Visit!3!Doc],	CONVERT(varchar(8), VisitEndDate, 108) as [Visit!3!End],	
	CONVERT(varchar(8), VisitStartDate, 108) as [Visit!3!Start],	convert(varchar(10), visitDate, 105) as [Visit!3!Date], 	agentID as [Visit!3!UN], 	
	clientID as [Visit!3!CN] ,NULL, NULL 
	, NULL
	from #visitsdocs
UNION all
select	5 ,	4 ,	NULL 
		,	NULL ,	t.docid as [Visit!3!Doc],	CONVERT(varchar(8), VisitEndDate, 108) as [Visit!3!End],	
		CONVERT(varchar(8), VisitStartDate, 108) as [Visit!3!Start],	convert(varchar(10), visitDate, 105) as [Visit!3!Date], 	agentID as [Visit!3!UN],
		clientID as [Visit!3!CN], NULL,case when t.VendorCode in ('XXX') then SpAnswer else '' end 
		,case when t.VendorCode in ('YYY') then SpAnswer else '' end 
		from #answersdocs t
		join #visitsdocs t1 on t.docid = t1.docid
		where t.qstid in (1,2)
	order by 5,2
for xml explicit	



формирует такой XML :
<DocumentCollection>
  <Document>
    <Visit Doc="515" End="10:30:00" Start="10:00:00" Date="03-03-2015" UN="512" CN="256">
      <SAReport>
        <Pos PosT="Y" PosN="" />
        <Pos PosT="" PosN="N" />
      </SAReport>
    </Visit>
    <Visit Doc="516" End="11:30:00" Start="11:00:00" Date="03-03-2015" UN="513" CN="562">
      <SAReport>
        <Pos PosT="N" PosN="" />
        <Pos PosT="" PosN="N" />
      </SAReport>
    </Visit>
  </Document>
</DocumentCollection>


Есть неточность: вместо

<Pos PosT="Y" PosN="" />
<Pos PosT="" PosN="N" />

должно быть в одну строку
<Pos PosT="Y" PosN="N" />

Подскажите, что изменить в запросе, чтобы получить требуемый результат?
20 мар 15, 10:34    [17408532]     Ответить | Цитировать Сообщить модератору
 Re: запрос в xml  [new]
Glory
Member

Откуда:
Сообщений: 104751
Volodya
Подскажите, что изменить в запросе, чтобы получить требуемый результат?

1. Найти тот из ваших запросов, который фомирует эти элементы
2. Изменить его, чтобы он не формировал дубликаты
20 мар 15, 10:45    [17408580]     Ответить | Цитировать Сообщить модератору
 Re: запрос в xml  [new]
explicit,
Guest
Volodya
Подскажите, что изменить в запросе, чтобы получить требуемый результат?

это
select	5 ,	4 ,	NULL 
		,	NULL ,	t.docid as [Visit!3!Doc],	CONVERT(varchar(8), VisitEndDate, 108) as [Visit!3!End],	
		CONVERT(varchar(8), VisitStartDate, 108) as [Visit!3!Start],	convert(varchar(10), visitDate, 105) as [Visit!3!Date], 	agentID as [Visit!3!UN],
		clientID as [Visit!3!CN], NULL
		,max(case when t.VendorCode in ('XXX') then SpAnswer else '' end) 
		,max(case when t.VendorCode in ('YYY') then SpAnswer else '' end) 
		from #answersdocs t
		join #visitsdocs t1 on t.docid = t1.docid
		where t.qstid in (1,2)
		group by t.docid, CONVERT(varchar(8), VisitEndDate, 108),	
				CONVERT(varchar(8), VisitStartDate, 108),	convert(varchar(10), visitDate, 105), 	agentID, clientID


у вас, что 2000 сервер? почему через for xml explicit ?
через for xml path на порядок проще и читаемее
+
select

	(select 
		 a.docid																	as [@Doc]
		,convert(varchar(8), a.VisitEndDate, 108)									as [@End]
		,convert(varchar(8), a.VisitStartDate, 108)									as [@Start]
		,convert(varchar(10), a.VisitDate, 105)										as [@Date]
		,a.agentid																	as [@UN]
		,a.clientid																	as [@CN]
		,max(case when b.qstid=1 and b.VendorCode in ('XXX') then SpAnswer end)		as [SAReport/Pos/@PosT]
		,max(case when b.qstid=2 and b.VendorCode in ('YYY') then SpAnswer end)		as [SAReport/Pos/@PosN]

	from #visitsdocs a
	inner join #answersdocs b on a.docid=b.docid 
	where b.qstid in (1,2)

	group by 
		 a.docid
		,convert(varchar(8), a.VisitEndDate, 108)
		,convert(varchar(8), a.VisitStartDate, 108)
		,convert(varchar(10), a.VisitDate, 105)
		,a.agentid
		,a.clientid	

	for xml path('Visit'), type) as Document

for xml path ('DocumentCollection')


<DocumentCollection>
  <Document>
    <Visit Doc="515" End="10:30:00" Start="10:00:00" Date="03-03-2015" UN="512" CN="256">
      <SAReport>
        <Pos PosT="Y" PosN="N" />
      </SAReport>
    </Visit>
    <Visit Doc="516" End="11:30:00" Start="11:00:00" Date="03-03-2015" UN="513" CN="562">
      <SAReport>
        <Pos PosT="N" PosN="N" />
      </SAReport>
    </Visit>
  </Document>
</DocumentCollection>
20 мар 15, 11:33    [17408883]     Ответить | Цитировать Сообщить модератору
 Re: запрос в xml  [new]
Volodya
Member

Откуда:
Сообщений: 450
Действительно, через for xml path проще )
Приятно посмотреть на работу Мастера. Спасибо.
20 мар 15, 12:05    [17409172]     Ответить | Цитировать Сообщить модератору
 Re: запрос в xml  [new]
Volodya
Member

Откуда:
Сообщений: 450
Доброго времени суток!

Запрос:
select
	(select 
		 a.docid										as [@Doc]
		,convert(varchar(8), a.VisitEndDate, 108)		as [@End]
		,convert(varchar(8), a.VisitStartDate, 108)		as [@Start]
		,convert(varchar(10), a.VisitDate, 120)			as [@Date]
		,a.agentid										as [@UN]
		,a.clientid										as [@CN]
		,max(case when a.VendorCode in ('CASH_TYPE') then SpAnswer end)		as [SAReport/Pos/@PosT]
		,max(case when a.VendorCode in ('CASH_NUMBER') then SpAnswer end)		as [SAReport/Pos/@PosN]

		,(select
			VendorCode																	as [Param/@SC]
			, max(case when qstclass = 'PR' and SpAnswer  ='Y' then 1 else 0 end)			as [Param/@Presence]
			, max(case when qstclass = 'FS' and SpAnswer  = 'Y' then 1 else 0 end)			as [Param/@FS]
			, max(case when qstclass = 'А0' and SpAnswer  ='Y' then 1 else 0 end)			as [Param/@А0] 
			, max(case when qstclass not in ('PR', 'FS', 'А0') and isnumeric(SpAnswer) = 1 
				then SpAnswer  else 0 end)													as [Param/@Amount]
			from #report_SA b
			where a.docid = b.docid and VendorCode not in ('CASH_TYPE','CASH_NUMBER')
			group by VendorCode, qstid 
			order by qstid 
					
			for xml path(''), type)  as SAReport

	from #report_SA a
	where a.VendorCode in ('CASH_TYPE','CASH_NUMBER')
	group by 
		 a.docid
		,convert(varchar(8), a.VisitEndDate, 108)
		,convert(varchar(8), a.VisitStartDate, 108)
		,convert(varchar(10), a.VisitDate, 120)
		,a.agentid
		,a.clientid	
	for xml path('Visit'), type) as Document
for xml path ('DocumentCollection')



формирует такой документ :

<DocumentCollection>
  <Document>
    <Visit Doc="677911" End="18:29:00" Start="17:56:00" Date="2015-03-10" UN="217" CN="1263434">
      <SAReport>
        <Pos PosT="Р" PosN="1" />
        <Param SC="SLT_GUM" Presence="0" FS="0" А0="0" Amount="45" />
        <Param SC="SLT_CONF" Presence="0" FS="0" А0="0" Amount="24" />
        <Param SC="SLT_GUM_A0" Presence="0" FS="0" А0="0" Amount="0" />



Подскажите, пожалуйста, что нужно изменить в запросе, чтобы элемент Param формировался как дочерний элемент к Pos ?
то есть чтобы было так :


<DocumentCollection>
  <Document>
    <Visit Doc="677911" End="18:29:00" Start="17:56:00" Date="2015-03-10" UN="217" CN="1263434">
      <SAReport>
        <Pos PosT="Р" PosN="1" />
               <Param SC="SLT_GUM" Presence="0" FS="0" А0="0" Amount="45" />
              <Param SC="SLT_CONF" Presence="0" FS="0" А0="0" Amount="24" />
              <Param SC="SLT_GUM_A0" Presence="0" FS="0" А0="0" Amount="0" />
        </Pos>
    </SAReport>
24 мар 15, 11:08    [17423391]     Ответить | Цитировать Сообщить модератору
 Re: запрос в xml  [new]
Volodya
Member

Откуда:
Сообщений: 450
доделал пример, что бы можно было оперировать тестовыми данными:

скрипт:
if OBJECT_ID('tempdb..#visitsdocs') is not null	drop table #visitsdocs
create table #visitsdocs
	(visitid int, agentid int, clientid int, visitdate smalldatetime, visitstartdate smalldatetime, visitenddate smalldatetime,
		uploaddate smalldatetime, docid int,  primary key (visitid, docid)
	)

insert #visitsdocs values (1, 512, 256, '20150303', '20150303 10:00', '20150303 10:30', '20150303 10:40', 515)
insert #visitsdocs values (2, 513, 562, '20150303', '20150303 11:00', '20150303 11:30', '20150303 11:40', 516)

--select * from #visitsdocs


if OBJECT_ID('tempdb..#answersdocs') is not null	drop table #answersdocs
create table #answersdocs
	(docid int, qstid bigint, SpAnswer varchar(5), VendorCode varchar(50)
		, FS varchar(5), PR varchar(5), А0 varchar(5), primary key (docid, qstid)
	)

insert #answersdocs values (515, 1, 'Y', 'XXX', '', '', '')
insert #answersdocs values (515, 2, 'N', 'YYY', '', '', '')
insert #answersdocs values (515, 3, 'n', 'ZZZ', 'A', 'B', 'C')
insert #answersdocs values (515, 4, 'n', 'ZZZ', 'B', 'A', 'C')
insert #answersdocs values (515, 5, 'n', 'ZZZ', 'C', 'A', 'B')
insert #answersdocs values (516, 1, 'N', 'XXX', '', '', '')
insert #answersdocs values (516, 2, 'N', 'YYY', '', '', '')
insert #answersdocs values (516, 3, 'N', 'ZZZ', 'A', 'B', 'C')
insert #answersdocs values (516, 4, 'n', 'ZZZ', 'B', 'A', 'C')
insert #answersdocs values (516, 5, 'n', 'ZZZ', 'C', 'A', 'B')

--select * from #answersdocs

select

	(select 
		 a.docid																	as [@Doc]
		,convert(varchar(8), a.VisitEndDate, 108)									as [@End]
		,convert(varchar(8), a.VisitStartDate, 108)									as [@Start]
		,convert(varchar(10), a.VisitDate, 105)										as [@Date]
		,a.agentid																	as [@UN]
		,a.clientid																	as [@CN]
		,max(case when b.qstid=1 and b.VendorCode in ('XXX') then SpAnswer end)		as [SAReport/Pos/@PosT]
		,max(case when b.qstid=2 and b.VendorCode in ('YYY') then SpAnswer end)		as [SAReport/Pos/@PosN]


		,(select VendorCode																	as [Param/@SC]
			, max(case when VendorCode in ('ZZZ') and FS  ='A' then 1 else 0 end)			as [Param/@Presence]
			,max(case when VendorCode in ('ZZZ') and PR  ='A' then 1 else 0 end)				as [Param/@FS]
			
			from #answersdocs t
			where t.docid = a.docid and qstid not in (1,2)
			group by VendorCode, qstid 
			order by qstid 
			for xml path(''), type)  as SAReport



	from #visitsdocs a
	inner join #answersdocs b on a.docid=b.docid 
	where b.qstid in (1,2)

	group by 
		 a.docid
		,convert(varchar(8), a.VisitEndDate, 108)
		,convert(varchar(8), a.VisitStartDate, 108)
		,convert(varchar(10), a.VisitDate, 105)
		,a.agentid
		,a.clientid	

	for xml path('Visit'), type) as Document

for xml path ('DocumentCollection')


выдает xml
<DocumentCollection>
  <Document>
    <Visit Doc="515" End="10:30:00" Start="10:00:00" Date="03-03-2015" UN="512" CN="256">
      <SAReport>
        <Pos PosT="Y" PosN="N" />
        <Param SC="ZZZ" Presence="1" FS="0" />
        <Param SC="ZZZ" Presence="0" FS="1" />
        <Param SC="ZZZ" Presence="0" FS="1" />
      </SAReport>
    </Visit>
    <Visit Doc="516" End="11:30:00" Start="11:00:00" Date="03-03-2015" UN="513" CN="562">
      <SAReport>
        <Pos PosT="N" PosN="N" />
        <Param SC="ZZZ" Presence="1" FS="0" />
        <Param SC="ZZZ" Presence="0" FS="1" />
        <Param SC="ZZZ" Presence="0" FS="1" />
      </SAReport>
    </Visit>
  </Document>
</DocumentCollection>



требуется

<DocumentCollection>
  <Document>
    <Visit Doc="515" End="10:30:00" Start="10:00:00" Date="03-03-2015" UN="512" CN="256">
      <SAReport>
        <Pos PosT="Y" PosN="N" />
             <Param SC="ZZZ" Presence="1" FS="0" />
            <Param SC="ZZZ" Presence="0" FS="1" />
           <Param SC="ZZZ" Presence="0" FS="1" />
        </Pos>
      </SAReport>
    </Visit>
    <Visit Doc="516" End="11:30:00" Start="11:00:00" Date="03-03-2015" UN="513" CN="562">
      <SAReport>
        <Pos PosT="N" PosN="N" />
             <Param SC="ZZZ" Presence="1" FS="0" />
             <Param SC="ZZZ" Presence="0" FS="1" />
            <Param SC="ZZZ" Presence="0" FS="1" />
        </Pos>
      </SAReport>
    </Visit>
  </Document>
</DocumentCollection>
24 мар 15, 12:34    [17424066]     Ответить | Цитировать Сообщить модератору
 Re: запрос в xml  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
select

	(select 
		 a.docid																	as [@Doc]
		,convert(varchar(8), a.VisitEndDate, 108)									as [@End]
		,convert(varchar(8), a.VisitStartDate, 108)									as [@Start]
		,convert(varchar(10), a.VisitDate, 105)										as [@Date]
		,a.agentid																	as [@UN]
		,a.clientid																	as [@CN]
		,max(case when b.qstid=1 and b.VendorCode in ('XXX') then SpAnswer end)		as [SAReport/Pos/@PosT]
		,max(case when b.qstid=2 and b.VendorCode in ('YYY') then SpAnswer end)		as [SAReport/Pos/@PosN]


		,(select VendorCode																	as [Param/@SC]
			, max(case when VendorCode in ('ZZZ') and FS  ='A' then 1 else 0 end)			as [Param/@Presence]
			,max(case when VendorCode in ('ZZZ') and PR  ='A' then 1 else 0 end)				as [Param/@FS]
			
			from #answersdocs t
			where t.docid = a.docid and qstid not in (1,2)
			group by VendorCode, qstid 
			order by qstid 
			for xml path(''), type)  as [SAReport/Pos]



	from #visitsdocs a
	inner join #answersdocs b on a.docid=b.docid 
	where b.qstid in (1,2)

	group by 
		 a.docid
		,convert(varchar(8), a.VisitEndDate, 108)
		,convert(varchar(8), a.VisitStartDate, 108)
		,convert(varchar(10), a.VisitDate, 105)
		,a.agentid
		,a.clientid	

	for xml path('Visit'), type) as Document

for xml path ('DocumentCollection')
24 мар 15, 12:43    [17424119]     Ответить | Цитировать Сообщить модератору
 Re: запрос в xml  [new]
Volodya
Member

Откуда:
Сообщений: 450
Большое спасибо! я сегодня убил полдня на написание подзапроса в подзапросе ...
24 мар 15, 12:52    [17424169]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить