查询从单行中的表的两行返回数据

0 oracle

我的桌子看起来像这样:

ID     APPLICATION    OTHERVALUE
0001   subapp         SubvalueA
0001   mainapp        MainValue1
0002   subapp         SubvalueB
0002   mainapp        MainValue1
0003   subapp         SubvalueA
0003   mainapp        MainValue2
Run Code Online (Sandbox Code Playgroud)

我需要 的所有行subapp,但是OtherValue当应用程序mainapp来自同一个表且 ID 相同时,我还需要值。我正在使用甲骨文。

如何为此构建查询?

预期结果:

ID     APPLICATION    OTHERVALUE    OTHERVALUE2
0001   subapp         SubvalueA     MainValue1
0002   subapp         SubvalueB     MainValue1
0003   subapp         SubvalueA     MainValue2
Run Code Online (Sandbox Code Playgroud)

Tar*_*ryn 6

您可以使用聚合函数和CASE语句将数据转换为以下格式:

select id,
  max(case when application ='subapp' then application end) application,
  max(case when application ='subapp' then othervalue end) othervalue,
  max(case when application ='mainapp' then othervalue end) othervalue2
from yourtable
group by id;
Run Code Online (Sandbox Code Playgroud)

请参阅带有演示的 SQL Fiddle

结果:

| ID | APPLICATION | OTHERVALUE | OTHERVALUE2 |
-----------------------------------------------
|  1 |      subapp |  SubvalueA |  MainValue1 |
|  2 |      subapp |  SubvalueB |  MainValue1 |
|  3 |      subapp |  SubvalueA |  MainValue2 |
Run Code Online (Sandbox Code Playgroud)