2013-02-23 93 views
5

我有两个表A和B. A有两列:id,金额。 B还有两列:id,金额。 我希望结合A和B来创建一个新的表C,它有两列:id,amount。我怎样才能使用SQL? 例如:如何将两张表合并成同一列?

A 
    ('A1',1) 
    ('A2',5) 
    ('A3',2) 
    ('A4',5) 
    ('A5',2) 
    ('A6',7) 
B 
    ('A1',3) 
    ('A3',2) 
    ('A4',7) 
    ('A5',4) 
    ('A8',2) 
    ('A9',10) 

所以C应该是:

C 
    ('A1',4) 
    ('A2',5) 
    ('A3',4) 
    ('A4',12) 
    ('A5',6) 
    ('A6',7) 
    ('A8',2) 
    ('A9',10) 

谢谢!

回答

7
SELECT ID, SUM(Amount) total 
FROM 
     (
      SELECT ID, Amount FROM A 
      UNION ALL 
      SELECT ID, AMount FROM B 
     ) s 
GROUP BY ID 

您可以创建从查询结果的表的基础。

CREATE TABLE C 
AS 
SELECT ID, SUM(Amount) total 
FROM 
     (
      SELECT ID, Amount FROM A 
      UNION ALL 
      SELECT ID, AMount FROM B 
     ) s 
GROUP BY ID; 
+1

+1您还可以添加CREATE TABLE c LIKE a :),但我不确定Oracle是否具有该功能。 – 2013-02-23 09:17:33

+0

谢谢!另一个问题(对不起,我是新来的sql),如果A和B只是选择结果,我该如何实现呢?我的意思是,A不是真正的表格,我使用SELECT FROM WHERE获得A ...我是否需要创建视图或其他内容?谢谢! – lkkeepmoving 2013-02-23 09:21:46

+0

@lkkeepmoving是的,你可以创建一个视图,但如果你不想这样做,你也可以在子查询中使用该查询,例如'SELECT ID,Amount FROM(...在这里添加查询...)newTB ' – 2013-02-23 09:23:46

0

上述答案的作品精绝。只需要添加一个order by子句即可按ID排序。

SELECT ID, SUM(Amount) as total 
FROM 
     (
      SELECT ID, Amount FROM A 
      UNION ALL 
      SELECT ID, AMount FROM B 
     ) s 
GROUP by ID 
order by ID 
相关问题