暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何将一行拆分为多行?

askTom 2017-08-17
542

问题描述

嗨,汤姆,
你能找到我的样本数据和例外数据吗:

表名: deal_info

示例1唯一数字
区域 _ 纳米传输 _ 无发票 _ 无PDT_BASE_NO PDT_OPT_NO PDT_BASE_QTY PDT_OPT_QTY RPTD_BKEND_DEAL_1_ID RPTD_BKEND_DEAL_2_ID RPTD_BKEND_DEAL_3_ID RPTD_BKEND_DEAL_4_ID
EMEA 4867752340 447151490 861678-B21 NULL 1 0 94962267 94962267 NULL NULL

例外输出
区域 _ 纳米传输 _ 无发票 _ 无PDT_BASE_NO PDT_OPT_NO PDT_BASE_QTY PDT_OPT_QTY RPTD_BKEND_DEAL_1_ID RPTD_BKEND_DEAL_2_ID RPTD_BKEND_DEAL_3_ID RPTD_BKEND_DEAL_4_ID
EMEA 4867752340 447151490 861678-B21 NULL 1 0 94962267 NULL
EMEA 4867752340 447151490 861678-B21 NULL 1 0 NULL 94962267 NULL NULL


示例2

区域 _ 纳米传输 _ 无发票 _ 无PDT_BASE_NO PDT_OPT_NO PDT_BASE_QTY PDT_OPT_QTY RPTD_BKEND_DEAL_1_ID RPTD_BKEND_DEAL_2_ID RPTD_BKEND_DEAL_3_ID RPTD_BKEND_DEAL_4_ID
EMEA 4867752340 447151490 861678-B21 NULL 1 0 94962267 94962267 100034 100035

例外输出
区域 _ 纳米传输 _ 无发票 _ 无PDT_BASE_NO PDT_OPT_NO PDT_BASE_QTY PDT_OPT_QTY RPTD_BKEND_DEAL_1_ID RPTD_BKEND_DEAL_2_ID RPTD_BKEND_DEAL_3_ID RPTD_BKEND_DEAL_4_ID
EMEA 4867752340 447151490 861678-B21 NULL 1 0 94962267 null NULL NULL
EMEA 4867752340 447151490 861678-B21 NULL 1 0 NULL 94962267 NULL NULL
EMEA 4867752340 447151490 861678-B21 NULL 1 0 NULL NULL 100034 NULL
EMEA 4867752340 447151490 861678-B21 NULL 1 0 NULL 100035

在这里,基于RPTD_BKEND_DEAL_IDs,我们必须拆分数据。

谢谢你的全力支持。


谢谢
纳伦德拉B
9632799255

专家解答

第一件事你需要一个N行的表,其中N是你想要拆分出来的列数。

交叉加入你的表。并返回表的第n行 (其他表的),其中表的第n列不为null。

并在select语句中做类似的事情。例如:

with rws as (
  select rownum rn from dual
  connect by level <= 3
), vals as (
  select 1 id, 1 c1, null c2, null c3 from dual union all
  select 2 id, 2 c1, 3 c2, 4 c3 from dual 
)
  select id, case when rn = 1 then c1 end c1, 
         case when rn = 2 then c2 end c2, 
         case when rn = 3 then c3 end c3
  from   rws
  cross  join vals
  where  case 
    when rn = 1 then c1 else 0 
  end is not null
  and    case 
    when rn = 2 then c2 else 0 
  end    is not null
  and    case 
    when rn = 3 then c3 else 0 
  end    is not null;

ID  C1  C2  C3  
1   1           
2   2           
2       3       
2           4  
复制

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论