我有两个表:
表A
| Part | Val |
|:----:|:---:|
| AA | 3 |
| AB | 2 |
| AC | 11 |
| AD | 6 |
| AE | 3 |
表B
| Part | Val |
|:----:|:---:|
| AC | 9 |
| AF | 5 |
| AG | 1 |
| AH | 10 |
| AI | 97 |
我想union
这些表来实现此结果:
| Part | ValA | ValB |
|:----:|:----:|:----:|
| AA | 3 | 0 |
| AB | 2 | 0 |
| AC | 11 | 9 |
| AD | 6 | 0 |
| AE | 3 | 0 |
| AF | 0 | 5 |
| AG | 0 | 1 |
| AH | 0 | 10 |
| AI | 0 | 97 |
我尝试过:
SELECT * FROM tableA
UNION ALL
SELECT * FROM tableB
但这只会导致一列val,我不希望这样做。
如何合并这些表并创建两列,每列一个,如果零件未出现在另一张表中,则该列的值只能为0?
SQL FIDDLE供参考。
答案 0 :(得分:5)
您似乎想加入表格,而不是合并表格
select nvl(a.Part, b.Part) as Part,
nvl( a.Val, 0 ) as ValA,
nvl( b.Val, 0 ) as ValB
from tableA a
full outer join tableB b
on( a.Part = b.Part )
order by 1
请注意,像在小提琴中一样使用区分大小写的标识符通常是不受欢迎的。这样做会使编写查询变得比原本复杂得多,而且不得不在每个列名的两边加上双引号也很烦人。
答案 1 :(得分:0)
您可以在下面尝试-
select part,max(valA),max(valB) from
(
select part, val as valA, 0 as valB from tableA
union all
select part, 0 , val from tableB
)A group by part