使用informix查询转换列中的行

时间:2015-09-03 20:42:45

标签: sql informix

我想转换

inpvacart       inpvapvta inpvapvt1 inpvapvt2 inpvapvt3 inpvapvt4
CS-279          270.4149    0.0000    0.0000    0.0000   0.0000
AAA5030         1.9300      1.9300    1.6212    0.0000   0.0000

查询

select  
    inpvacart, 
    inpvapvta, 
    inpvapvt1, 
    inpvapvt2, 
    inpvapvt3, 
    inpvapvt4
from inpva;

进入这个

  inpvacart   line  value
  CS-279       1    270.4149
  CS-279       2    0.00000
  CS-279       3    0.00000
  CS-279       4    0.00000
  CS-279       5    0.00000
  AAA5030      1    1.9300
  AAA5030      2    1.9300
  AAA5030      3    1.6212    
  AAA5030      4    0.0000
  AAA5030      5    0.0000

我试过这个

 select s.inpvacart,l.lista,l.resultados
 from inpva as s,
table(values(1,s.inpvapvta),
            (2,s.inpvapvt1),
            (3,s.inpvapvt2),
            (4,s.inpvapvt3),
            (5,s.inpvapvt4))
)as l(lista,resultados);   

但它在informix 9中不起作用

有没有办法将行转置为列?

谢谢

1 个答案:

答案 0 :(得分:2)

我不认为Informix有任何unpivot运算符可以将列转换为行,就像MSSQL一样,但是一种方法是手动转置列,然后使用union创建像这样的一套:

select inpvacart, 1 as line, inpvapvta as value from inpva
union all
select inpvacart, 2 as line, inpvapvt1 as value from inpva
union all
select inpvacart, 3 as line, inpvapvt2 as value from inpva
union all
select inpvacart, 4 as line, inpvapvt3 as value from inpva
union all
select inpvacart, 5 as line, inpvapvt4 as value from inpva
order by inpvacart, line;

它不是很漂亮,但它应该有用。