我需要将长表中的值恢复为宽,同时保留重复的行:
IE:我的桌子:
Colname | ColValue | PK
Field1 | 12 | 1
Field2 | apple | 1
Field3 | blue | 1
Field3 | Red | 1
我想要的是什么:
PK | Field1| Field2 | Field3
1 |12 | apple |blue
1 |12 | apple |red
我似乎无法弄清楚如何在这种情况下使枢轴工作,以执行任何max(colvalue),然后删除第二个Field 3值。动态列解决方案非常棒,因为我不一定知道字段/列的名称。
我有什么:
select PK as CompPK,
ColName,
Colvalue
from test1)
Pivot(
max(colvalue) for ColNamein ('Field1' as Field1,'Field2' as Field2,'Field3' as Field3)
这当然只返回:
PK | Field1| Field2 | Field3
1 |12 | apple |blue
我确实有一个时间戳列和其他随机的'这张桌子上的列。
修改:
是。从理论上讲,我想要所有可能的迭代。
答案 0 :(得分:0)
尝试
select * from(
Select pk, colvalue as field1
From table1
Where colname ='Field1'
) T1
Full Join (
Select pk, colvalue as field2
From table1
Where colname ='Field2'
) T2
Using (pk)
Full join (
Select pk, colvalue as field3
From table1
Where colname ='Field3'
) T3
Using (pk)
演示http://sqlfiddle.com/#!4/ec147/3
| PK | FIELD1 | FIELD2 | FIELD3 |
|----|--------|--------|--------|
| 1 | 12 | apple | blue |
| 1 | 12 | apple | Red |