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

Откуда:
Сообщений: 48
			select
			
				(select 
					CF.CounterID as counterID
					,case when CF.PrevValue is null then '' else format(CF.PrevValue, '##########0.#####', 'en-US') end as prev
					,case when CF.Value is null then format(CF.PrevValue, '##########0.#####', 'en-US') else format(CF.Value, '##########0.#####', 'en-US') end as [current]
					,US.Name as namesch
				from Counter.Account CA
					inner join Counter.Flow CF on CF.CounterID = CA.CounterID
						and CF.PeriodID = ACT.PeriodID
				where CA.AccountID = ACT.AccountID
					and CF.SubListID = US.ID
				for xml raw('Counter'), type)
			from Payment.Balance ACT
				inner join Utility.SubList US on US.ID = ACT.SubListID
				inner join Utility.Unit UU on UU.ID = US.UnitID
			where  ACT.PeriodID = 27
				and ACT.[Print] = 1
				and US.ID <> 7
				and ACT.AccountID = 4639
			for xml raw('item'), type


Подскажите как можно в WHERE основного запроса проверить условие когда в подзапросе counterid is not null ?
22 апр 16, 11:02    [19092301]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с вложенным XML  [new]
sergeimv
Member

Откуда: Россия, г.Казань
Сообщений: 42
Если версия сервера позволяет, то подзапрос перенести в from через APPLY.
22 апр 16, 11:07    [19092330]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с вложенным XML  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
SELECT t.*
FROM Payment.Balance ACT
JOIN Utility.SubList US ON US.id = ACT.SubListID
JOIN Utility.Unit UU ON UU.id = US.UnitID
OUTER APPLY (
    SELECT val = (
        SELECT
              CF.counterID AS counterID
           , CASE WHEN CF.PrevValue IS NULL
                THEN ''
                ELSE FORMAT(CF.PrevValue, '##########0.#####', 'en-US')
             END AS prev
           , FORMAT(ISNULL(CF.value, CF.PrevValue), '##########0.#####', 'en-US') AS [current]
           , US.Name AS namesch
        FROM Counter.Account CA
        JOIN Counter.Flow CF ON CF.counterID = CA.counterID
            AND CF.PeriodID = ACT.PeriodID
        WHERE CA.AccountID = ACT.AccountID
            AND CF.SubListID = US.id
        FOR XML RAW ('Counter'), TYPE
    )
) t
WHERE ACT.PeriodID = 27
    AND ACT.[Print] = 1
    AND US.id <> 7
    AND ACT.AccountID = 4639
    AND t.val IS NOT NULL
FOR XML RAW ('item'), TYPE


Опередили меня малость :)
22 апр 16, 11:10    [19092352]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с вложенным XML  [new]
Doctormom
Member

Откуда:
Сообщений: 48
Спасибо за хорошее предложение.. Не знал что так можно.
Но структура XML изменилась :
    <item>
      <V>
        <Counter />
      </V>
    </item>


А нужно:


<item>
      <Counter />
 </item>
22 апр 16, 14:08    [19093668]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с вложенным XML  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Скажите, пожалуйста, откуда там тег "V", если его в моем примере нет. Сдается мне, что обманом пахнет :)
22 апр 16, 14:42    [19093924]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с вложенным XML  [new]
Doctormom
Member

Откуда:
Сообщений: 48
Извиняюсь. что ввел в заблуждение... Судя по Вашему примеру это будет тег val
22 апр 16, 14:45    [19093952]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить