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

Oracle 将两行合并为2列的一行

askTom 2018-08-08
477

问题描述

有没有一种方法可以简单地通过单个枢轴或分析查询将两行的结果合并为一行?我们有一个遗留表,它实际上是以列格式存储键值对。作为测试用例,这里有一个例子:

create table kvtest ( App_ID Number, User_Id Number, strKey varchar2(10), strValue varchar2(20));

insert into kvtest select 1, 100, 'Color', 'Blue' from dual;
insert into kvtest select 1, 200, 'Location', 'USA' from dual;
commit;


来自kvtest的select * 的输出:
    APP_ID    USER_ID STRKEY     STRVALUE            
---------- ---------- ---------- --------------------
         1        200 Location   USA                 
         1        100 Color      Blue      


我想通过app_id组合键: 值,而不管user_id在这个例子中总是被限制为2行 (这意味着每个app_id不会有3个user_id,只有2个)。

我想要的输出看起来像这样:
    APP_ID LOCATION                         COLOR                           
---------- -------------------------------- ------------
         1 USA                              Blue       


谢谢!

专家解答

没问题。枢轴会在这里帮助你。

-在子查询中,选择您想要在输出中或将按以下方式进行透视的列 (数据库将隐式按不在透视中的列进行分组)
-然后在pivot子句中列出要成为列的键:

with rws as (
  select app_id, strkey, strvalue from kvtest
)
  select * from rws
  pivot ( 
    min ( strvalue ) for strkey in (
      'Color' color, 'Location' location
    )
  );

APP_ID   COLOR   LOCATION   
       1 Blue    USA   


如果您想了解有关旋转的更多信息,请阅读:https://blogs.oracle.com/sql/how-to-convert-rows-to-columns-and-back-again-with-sql-aka-pivot-and-unpivot
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论