如何将表的列项旋转到列

时间:2012-10-24 18:38:15

标签: sql sql-server

我有一张桌子,需要更改

Key                  Value
CapacityColdBTU      2000
PowerLevelCold       B
Inverter/Standard    Standard
CapacityColdBTU      1500
PowerLevelCold       B
Inverter/Standard    Inverter

在我使用它之前,该表应如下所示。我不能使用该表搜索超过1个标准。我该如何改变它?

CapacityColdBTU   PowerLevelCold    Inverter/Standard
2000              B                 Inverter

谢谢

1 个答案:

答案 0 :(得分:3)

您可以使用PIVOT

select *
from
(
  select [key], value
  from yourtable
) x
pivot
(
  max(value)
  for [key] in ([CapacityColdBTU], [PowerLevelCold], [Inverter/Standard])
) p

请参阅SQL Fiddle with Demo

或者您可以将CASE语句与聚合一起使用,请注意,此版本会在Inverter字段中生成您使用[Inverter/Standard]值列出的结果:

select 
  max(case when [key] = 'CapacityColdBTU' 
        then value end) as CapacityColdBTU,
  max(case when [key] = 'PowerLevelCold' 
        then value end) as PowerLevelCold,
  min(case when [key] = 'Inverter/Standard' 
        then value end) as [Inverter/Standard]
from yourtable

请参阅SQL Fiddle with Demo

如果您有一个id或某个字段用主记录标识每个字段,那么您可以显示每个ID的值。