我有一个查询,该查询返回以下形式的表:
fastfill | slowfill
-------------------
x | y
查询:
Select fastfill, slowfill
from cask_fills
where barcode=xyz and gaugetype=xyz;
它只会返回一条记录。
我需要查询来以表单形式返回它
type | fills
----------------
fastfill | x
slowfill | y
但是我似乎无法弄清楚如何使用数据透视命令来执行此操作(或者实际上是执行此操作的任何命令)。
我所见过的所有教程和示例都涉及聚合功能来对数据进行分组,在本示例中我不需要这些数据,而且我似乎无法解决。
答案 0 :(得分:1)
您正在寻找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;
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
消除了空值