如何在DB2中将列拆分为行?

时间:2016-05-31 14:08:05

标签: sql db2

我的示例查询返回以下数据。我想将列数据拆分为行。

我不想使用UNION ALL,因为我的查询非常复杂。有没有其他方法可以实现这一目标?我正在使用DB2。

Current:
SKU_NBR   STR_NBR   ADDL_ORD_QTY    TRGT_OH_QTY   BUMP_INCR_QTY
301701     1902        60                40           20
346989     1902        60                             20

Expected:            
SKU_NBR     STR_NBR    Demand    
301701      1902        60   
301701      1902        40   
301701      1902        20   
346989      1902        60   
346989      1902       null  
346989      1902        20   

2 个答案:

答案 0 :(得分:3)

在我看来,看到价值的来源也是有用的 - 如果不是,你可以跳过列"输入"。这是一个使用tp作为表名的可能解决方案:

select sku_nbr,str_nbr, type, demand
  from tp , 
       lateral(values ('ADDL_ORD_QTY', tp.ADDL_ORD_QTY), 
                      ('TRGT_OH_QTY', tp.TRGT_OH_QTY),
                      ('BUMP_INCR_QTY', tp.BUMP_INCR_QTY)) 
        as q(type, demand);

答案 1 :(得分:0)

您可以使用cross join

with t as (
      <your query here>
     )
select t.SKU_NBR, t.STR_NBR,
       (case when n.n = 1 then ADDL_ORD_QTY
             when n.n = 2 then TRGT_OH_QTY
             when n.n = 3 then BUMP_INCR_QTY
        end) as demand
from t cross join
     (select 1 as n from sysibm.sysdummy1 union all
      select 2 from sysibm.sysdummy1 union all
      select 3 from sysibm.sysdummy1
     ) n;