繁体   English   中英

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

[英]How to split columns into rows in 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   

在我看来,看到值的来源也是有用的 - 如果不是,你可以跳过列“类型”。 这是一个使用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);

您可以使用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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM