将查询的多行结果作为值添加到另一个查询

时间:2015-04-09 13:55:17

标签: sql oracle

我有一个问题需要解决,这需要我从两个表中选择多个值。从表B中我需要3行的值来引用表A中的键列。

从我在网上找到的,我感觉到,这似乎归结为嵌套或递归/层次选择。但我无法弄清楚如何使用表A和B之间的不同条件构建实际查询...

鉴于这样的表:

Table A
ID | Val1 | Val2
----------------
01 | QWER | WERT
02 | ASDF | SDFG
...| ...  | ...

Table B
ID | Pos | ... | Val5
---------------------
01 | 001 | ... | X
01 | 002 | ... | Y
01 | 003 | ... | F
02 | 001 | ... | J
02 | 002 | ... | R
...| ... | ... | ...

列ID显然是A和B之间的参考值。

我需要构建一个这样的查询:

ID | Val1 | Val2 | Val5 at B.Pos 001 | Val5 at B.Pos 002 | Val5 at B.Pos 003

由于A和B之间的多个条件导致“右括号丢失”错误,我无法按如下方式创建查询:

select 
  A.ID, 
  A.Val1,
  A.Val2,
  (select B.Val5 from B where B.ID = A.ID and B.Pos = 001),
  (select B.Val5 from B where B.ID = A.ID and B.Pos = 002),
  (select B.Val5 from B where B.ID = A.ID and B.Pos = 003)
from A

有办法做到这一点吗?这是我以前从未遇到的情况,所以我迷路了...

1 个答案:

答案 0 :(得分:4)

这是你想要的吗?

select a.id, a.val1, a.val2,
       max(case when b.pos = 1 then b.val5 end) as bval1,
       max(case when b.pos = 2 then b.val5 end) as bval2,
       max(case when b.pos = 3 then b.val5 end) as bval3
from a join
     b
     on a.id = b.id
group by a.id, a.val1, a.val2;