2015-09-03 57 views
0

我想轉換行使用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

有沒有辦法將行轉換爲列?

謝謝

+0

你在用Informix 9.x做什麼?它應該很早以前就被放棄了。版本10和11.10也已過時;版本11.50已不在市場上(所以除非你已經擁有它,否則你不能購買它)。 11.70是'舊'版本,12.10是當前版本。 –

+0

@JonathanLeffler我不知道Informix,所以我的答案是通用的SQL,但是你能告訴我在Informix中是否有更好的方法來做到這一點?也許有一些unpivot /轉置的東西? – jpw

+1

@jpw:你的答案是現貨。它節省了我必須輸入相同的東西,所以謝謝。 –

回答

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; 

這不是很漂亮,但它應該工作。