问题描述
有没有一种方法可以简单地通过单个枢轴或分析查询将两行的结果合并为一行?我们有一个遗留表,它实际上是以列格式存储键值对。作为测试用例,这里有一个例子:
来自kvtest的select * 的输出:
我想通过app_id组合键: 值,而不管user_id在这个例子中总是被限制为2行 (这意味着每个app_id不会有3个user_id,只有2个)。
我想要的输出看起来像这样:
谢谢!
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子句中列出要成为列的键:
如果您想了解有关旋转的更多信息,请阅读:https://blogs.oracle.com/sql/how-to-convert-rows-to-columns-and-back-again-with-sql-aka-pivot-and-unpivot
-在子查询中,选择您想要在输出中或将按以下方式进行透视的列 (数据库将隐式按不在透视中的列进行分组)
-然后在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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




