如何简单地转动桌子(枢纽?)我似乎无法理解这个简单的概念

时间:2019-05-22 10:17:49

标签: sql sql-server pivot

我有一个查询,该查询返回以下形式的表:

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

查询:

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

它只会返回一条记录。

我需要查询来以表单形式返回它

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

但是我似乎无法弄清楚如何使用数据透视命令来执行此操作(或者实际上是执行此操作的任何命令)。

我所见过的所有教程和示例都涉及聚合功能来对数据进行分组,在本示例中我不需要这些数据,而且我似乎无法解决。

3 个答案:

答案 0 :(得分:1)

您正在寻找UNPIVOT

我将CROSS APPLYVALUES一起使用。

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

Results

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

答案 1 :(得分:0)

全部使用联盟

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

答案 2 :(得分:0)

每个人都提到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消除了空值