Db2 convert rows to columns

﹥>﹥吖頭↗ 提交于 2019-12-13 03:24:30

问题


I need the below results ..

Table :

Order postcode qnty
123    2234        1

Expected result:

Order          123
Postcode       2234
Qnty           1

SQL server:

Select pvt.element_name
      ,pvt.element_value(select order.postcode
                         from table name)up
unpivot (element_value for element_name in(order,postcode) as Pvt

How to achieve this in db2?


回答1:


Db2 for IBM i doesn't have a built-in unpviot function.. AFAIK, it's not available on any Db2 platofrm...unless it's been added recently.

The straight forward method

select 'ORDER' as key, order as value 
from mytable
UNION ALL
select 'POSTCODE', postcode
from mytable
UNION ALL
select 'QNTY', char(qnty)
from mytable;

A better performing method is to do a cross join between the source table and a correlated VALUES of as many rows as columns that need to be unpivoted.

select 
   Key, value
from mytable T,
      lateral (values ('ORDER', t.order)
                      , ('POSTCODE', t.postcode) 
                      , ('QNQTY', varchar(t.qnty))
                      ) as unpivot(key, value);

However, you'll need to know ahead of time what the values you're unpivoting on.

If you don't know the values, there are some ways to unpivot with the XMLTABLE (possibly JSON_TABLE) that might work. I've never used them, and I'm out of time to spend answering this question. You can find some examples via google.




回答2:


I have created a stored procedure for LUW that rotate a table: https://github.com/angoca/db2tools/blob/master/pivot.sql

You just need to call the stored procedure by passing the tablename as parameter, and it will return a cursor with the headers of the column in the first column.



来源:https://stackoverflow.com/questions/57493781/db2-convert-rows-to-columns

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!