我的示例查询返回以下数据。我想将列数据拆分为行。
我不想使用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
答案 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;