以上问题非常不清楚让我告诉你我的意思..
我有以下表格的表格
name ---- measure ----- value xxx-----------m1--------------x1 xxx-----------m2--------------x2 xxx-----------m3--------------x3 yyy-----------m1--------------y1 yyy-----------m2--------------y2 yyy-----------m3--------------y3
我想将上表转换为下面的表格
name --- m1 --- m2 --- m3 xxx------x1-----x2-----x3 yyy------y1-----y2-----y3
答案 0 :(得分:2)
你可以这样做来转动你的表
select name,
MAX(case when measure = 'm1' then value end) m1,
MAX(case when measure = 'm2' then value end) m2,
MAX(case when measure = 'm3' then value end) m3
from tableName
group by name
要在未修复列值时处理旋转,您应该尝试使用crosstab函数执行此操作
答案 1 :(得分:0)
如果列m1
,m2
和m3
已修复,那就是这样:
UPDATE tbl
SET m1 = t.value
FROM tbl t
WHERE tbl.name = t.name AND measure = 'm1';
同样适用于m2
和m3
只有这会产生重复。要删除哪个,你应该这样做:
DELETE FROM tbl WHERE measure = 'm2' OR measure = 'm3';
答案 2 :(得分:0)
尝试这个
select m11.name,m1,m2,m3 from(select name,value as m1 from tab where measure='m1')as m11,
(select name,value as m2 from tab where measure='m2' )as m12,
(select name,value as m3 from tab where measure='m3')as m13 where m11.name=m12.name and m11.name=m13.name and m12.name=m13.name;
答案 3 :(得分:0)
如果你想要这个一次性的程序,我会用简单的脚本完成这个。
插入名为
的新表m1值INSERT到new_table(name,m1) 从old_table中选择名称,值,其中measure =' m1'
更新具有相同名称的m2。
UPDATE NEW_TABLE 组 m2 = o.value 从 new_table n 加入 old_table o ON o.name = n.name AND o.measure =' m2'
更新具有相同名称的m3。
UPDATE NEW_TABLE 组 m3 = o.value 从 new_table n 加入 old_table o ON o.name = n.name AND o.measure =' m3'
未经测试。请测试。
答案 4 :(得分:0)
您可以尝试使用tablefunc扩展程序中的crosstab
。