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

Oracle 基于重复值的单列到多行

askTom 2017-07-08
299

问题描述



我有一个示例场景,我有一个名为cust的表,如下所示

select * from cust;


name   m1      m2       m3
ravi  maruti   honda    toyota
john  honda    toyota   null


我想要下面这样的输出

ravi maruti
ravi honda
ravi toyota
john honda
john toyota
john null


这就是我使用unpivot选项所做的,这就是我得到的

with t
as (select name,m1,m2,m3
from cust)
select *
from t
unpivot
(value for col in (name,m1,m2,m3));


col value
name ravi
m1   maruti
m2   honda
m3  toyota
name john
m1  honda
m2 toyota


我尝试了不同的方式,但无法提供所需的格式。plz帮助我...


问候
阿伦

专家解答

你只是解开了M1、M2和m3柱。所以名字不应该在unpivot子句中!如果你想让空值出现,你需要使用 “include nulls” 子句:

CREATE TABLE t
    (name varchar2(4), m1 varchar2(6), m2 varchar2(6), m3 varchar2(6))
;
    
INSERT INTO t VALUES ('ravi', 'maruti', 'honda', 'toyota');
INSERT INTO t VALUES ('john', 'honda', 'toyota', NULL);

with t1
as (select name,m1,m2,m3 from t)
select *
from t1
unpivot include nulls (
  value for col in (m1,m2,m3)
);

NAME CO VALUE 
---- -- ------
ravi M1 maruti
ravi M2 honda 
ravi M3 toyota
john M1 honda 
john M2 toyota
john M3


您可以在以下位置阅读有关展开的更多信息:https://blogs.oracle.com/sql/how-to-convert-rows-to-columns-and-back-again-with-sql-aka-pivot-and-unpivot

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

评论