我有一个问题需要解决,这需要我从两个表中选择多个值。从表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
有办法做到这一点吗?这是我以前从未遇到的情况,所以我迷路了...
答案 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;