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

Откуда: Иркутск
Сообщений: 346
Есть следующий запрос
Select ParentID, Pattern , Value from dbo.bm_DeliveryValues where ParentID = 588022001 and ParentType = 'Journal'


Получаем следующий результат:
588022001 DeliveryAreaID 0
588022001 Address Рябикова бул., 29, 18
588022001 Phone 89041129281
588022001 ClientID 20496
588022001 PersonID 20496
588022001 ExpeditorID 0
588022001 IsActionProduct 0
588022001 Status 100

Мне необходимо в одну строку сделать.
ParentID DeliveryAreaID Address Phone ClientID
588022001 0 Рябикова бул., 29, 18 89041129281 20496
25 окт 15, 06:26    [18322478]     Ответить | Цитировать Сообщить модератору
 Re: Как перевернуть результат запроса.  [new]
valex13
Member

Откуда: Иркутск
Сообщений: 346
Сейчас сделал так:

Select Top 1
	   ParentID,
	   [DeliveryAreaID] = (Select Top 1 Value from bm_DeliveryValues where ParentID = 588022001 and ParentType = 'Journal' and Pattern = 'DeliveryAreaID'),
	   [Address] = (Select Top 1 Value from bm_DeliveryValues where ParentID = 588022001 and ParentType = 'Journal' and Pattern = 'Address'),
	   [Phone] = (Select Top 1 Value from bm_DeliveryValues where ParentID = 588022001 and ParentType = 'Journal' and Pattern = 'Phone'),
	   [ClientID] = (Select Top 1 Value from bm_DeliveryValues where ParentID = 588022001 and ParentType = 'Journal' and Pattern = 'ClientID'),
	   [PersonID] = (Select Top 1 Value from bm_DeliveryValues where ParentID = 588022001 and ParentType = 'Journal' and Pattern = 'PersonID'),
	   [ExpeditorID] = (Select Top 1 Value from bm_DeliveryValues where ParentID = 588022001 and ParentType = 'Journal' and Pattern = 'ExpeditorID'),
	   [Status] = (Select Top 1 Value from bm_DeliveryValues where ParentID = 588022001 and ParentType = 'Journal' and Pattern = 'Status'),
	   [IsActionProduct] = (Select Top 1 Value from bm_DeliveryValues where ParentID = 588022001 and ParentType = 'Journal' and Pattern = 'IsActionProduct')
from bm_DeliveryValues as t1
 where ParentID = 588022001 and ParentType = 'Journal'	   


По старинке. Не могу понять, как конструкцию PIVOT в данном случае сделать и будет ли это эффективней?
25 окт 15, 06:54    [18322487]     Ответить | Цитировать Сообщить модератору
 Re: Как перевернуть результат запроса.  [new]
Диклевич Александр
Member

Откуда:
Сообщений: 610
valex13,

а что там понимать:

SELECT
   pvt.*
FROM (Select ParentID, Pattern , Value from dbo.bm_DeliveryValues where ParentID = 588022001 and ParentType = 'Journal') s
PIVOT (MIN(s.[value]) FOR s.[Pattern] IN ([DeliveryAreaID], [Address], [Phone], [ClientID], [PersonID], [ExpeditorID], [Status], [IsActionProduct])) AS pvt


насчет эффективности - проверите сами на реальных данных.
25 окт 15, 09:42    [18322542]     Ответить | Цитировать Сообщить модератору
 Re: Как перевернуть результат запроса.  [new]
Диклевич Александр
Member

Откуда:
Сообщений: 610
Диклевич Александр,

хотя, это уже эффективнее тем, что текст запроса меньше.
25 окт 15, 09:47    [18322543]     Ответить | Цитировать Сообщить модератору
 Re: Как перевернуть результат запроса.  [new]
valex13
Member

Откуда: Иркутск
Сообщений: 346
Спасибо.
26 окт 15, 03:18    [18324912]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить