2012-10-24 36 views
0

我有一个表,它需要改变如何旋转表的列项列

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

表应该如下之前,我使用它。我无法使用该表格搜索超过1个条件。我该如何改变它?

CapacityColdBTU PowerLevelCold Inverter/Standard 
2000    B     Inverter 

谢谢

+0

该表只包含一个实体还是存在外键或其他信息以表明它是单个实体的一部分? – jTC

回答

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/Standard]字段中的Inverter值:

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显示的值。

+0

OP的'Inverter'为选定的值,max()为'Standard'。并不是所需的逻辑是非常明确的... – PinnyM

+0

@PinnyM然后他们需要使用第二个版本'case'和聚合。我的猜测是,他们有一些独特的ID将这些值与主记录相关联,一旦到位就会自行解决。 – Taryn