8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何将 UNPIVOT 拆分成多个列?

onlyf 2月前

40 0

我有一张类似下图的表格,我需要类似下图的输出,我有一个使用 union 的查询来获取所需的输出,选择 different cd_5 作为 ORG_UNIT_CD,upper('\''||nm_5||'\'') 作为 ORG_U...

我有一张如下图所示的表格

我需要像下图这样的输出

enter image description here

我有一个使用 union 来获取所需输出的查询

    select distinct cd_5 as ORG_UNIT_CD, upper('"'||nm_5||'"') as ORG_UNIT_NM, cd4 as PARENT_ORG_UNIT_CD, 5 as ORG_UNIT_LEVEL 
from TBL
where cd_5 <> 0
union
select distinct cd_4 as ORG_UNIT_CD, upper('"'||nm_4||'"') as ORG_UNIT_NM, cd_3 as PARENT_ORG_UNIT_CD, 4 as ORG_UNIT_LEVEL 
from TBL 
where cd_4 <> 0
union
select distinct cd_3 as ORG_UNIT_CD, upper('"'||nm_3||'"') as ORG_UNIT_NM, cd_2 as PARENT_ORG_UNIT_CD, 3 as ORG_UNIT_LEVEL 
from TBL 
where cd_3 <> 0
union
select distinct cd_2 as ORG_UNIT_CD, upper('"'||nm_2||'"') as ORG_UNIT_NM, cd_1 as PARENT_ORG_UNIT_CD, 2 as ORG_UNIT_LEVEL 
from TBL
where cd_2 <> 0
union
select distinct cd_1 as ORG_UNIT_CD, upper('"'||nm_1||'"') as ORG_UNIT_NM, 0 as PARENT_ORG_UNIT_CD, 1 as ORG_UNIT_LEVEL 
from TBL 
where cd_1 <> 0
order by ORG_UNIT_LEVEL

我需要一个简化的查询来代替这个。因为我只给出了五个级别的层次结构,但实际上我有 20 个级别。

帖子版权声明 1、本帖标题:如何将 UNPIVOT 拆分成多个列?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由onlyf在本站《oracle》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 在 Oracle-11g 中使用 Unpivot

    它执行列到行的操作,并使用解码来导出其他列的值。

    尝试一下:

    select distinct /*product_code,*/quantity as ORG_UNIT_CD,
    decode(product_code,'cd1','"'||nm1||'"','cd2','"'||nm2||'"','cd3','"'||nm3||'"','cd4','"'||nm4||'"','cd5','"'||nm5||'"') as ORG_UNIT_NM,
    decode(product_code,'cd1','0','cd2','cd1','cd3','cd2','cd4','cd3','cd5','cd4') as PARENT_ORG_UNIT_CD
    from unpivot_test2
    UNPIVOT(quantity FOR product_code in (cd1 as 'cd1',cd2 as 'cd2',cd3 as 'cd3', cd4 as 'cd4', cd5 as 'cd5'))
    where quantity <> 0;;
    
返回
作者最近主题: