使用 informix 查询转换列中的行

Convert rows in columns with informix query

我要转换

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 中不起作用

有没有办法将行转列?

谢谢

我认为 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;

它不是很漂亮,但应该可以。