Как простой поворот стола (стержень?) Я не могу понять эту простую концепцию - PullRequest
0 голосов
/ 22 мая 2019

У меня есть запрос, который возвращает таблицу в форме:

fastfill | slowfill
-------------------
    x    |     y

запрос:

Select fastfill, slowfill 
from cask_fills 
where barcode=xyz and gaugetype=xyz;

Он будет возвращать только одну запись.

Iнужно, чтобы запрос вместо этого возвращал его в виде

 type    | fills
----------------
fastfill |   x
slowfill |   y

Но я не могу понять, как использовать команду pivot для этого (или даже любую команду для этого).

Все учебные пособия и примеры, которые я видел, включали агрегатные функции для группировки данных, которые мне не нужны в этом примере, и я не могу их решить.

Ответы [ 3 ]

1 голос
/ 22 мая 2019

Вы ищете UNPIVOT

Я бы использовал CROSS APPLY с VALUES, чтобы сделать это.

select v.*
from cask_fills 
CROSS APPLY(VALUES ('fastfill',fastfill),('slowfill',slowfill)) v(type,fills)
where barcode=xyz and gaugetype=xyz;

Результаты :

|     type | fills |
|----------|-------|
| fastfill |     x |
| slowfill |     y |
0 голосов
/ 22 мая 2019

Все упоминают UNPIVOT, но никто не отправляет запрос UNPIVOT:

declare @cask_fills table (fastfill varchar(20),slowfill varchar(20))
insert into @cask_fills 
values
('x','y')

SELECT type,fills
FROM   
   @cask_fills p  
UNPIVOT (
          fills FOR type IN   (fastfill,slowfill)  
        ) AS unpvt;

Результат:

type        fills
fastfill    x
slowfill    y

Разница между UNPIVOT и другими ответами заключается в том, что UNPIVOT исключает NULL

0 голосов
/ 22 мая 2019

использовать объединение всех

select 'fastfill' as type, fastfill as fill
from cask_fills 
where barcode=xyz and gaugetype=xyz
union all
select 'slowfill ', slowfill 
from cask_fills 
where barcode=xyz and gaugetype=xyz
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...