合并2个SQL查询

时间:2011-11-16 12:21:06

标签: sql group-by odbc db2

我遇到了SQL问题,我几乎可以肯定这很简单,但我找不到合适的答案。下面是这个例子。我想结合这两个查询:

SELECT 
    num_rata, SUM(val_imp*0.01) AS amount 
FROM table1
WHERE 
    col1 <> 0
    AND num_contract = 88
GROUP BY num_rata

返回类似的内容:

1   215.00
2   220.00
3   210.00
4   115.00
5   315.00

并且:

SELECT 
    num_rata, SUM(val_ban*0.01) AS amount
FROM table2
WHERE 
    num_contract = 2988
GROUP BY num_rata;

示例结果集:

1   15.00
2   615.00
3   275.00
4   285.00
5   285.00
6   275.00
7   260.00
8   215.00
9   215.00

作为最终结果,我想要这样的事情:

1   215.00 15.00
2   220.00 615.00
3   210.00 275.00
4   115.00 285.00
5   315.00 285.00
6          275.00
7          260.00
8          215.00 
9          215.00

感谢您的任何提示。

法比安

3 个答案:

答案 0 :(得分:3)

您可以使用联合或外部联接 - 我更喜欢联合,如下所示:

SELECT num_rata, sum(val_imp)*0.01 imp_amount, sum(val_ban)*0.01 ban_amount
from (SELECT num_rata, val_imp, 0 val_ban
      FROM table1
      WHERE col1 <> 0 AND num_contract = 88
      UNION ALL
      SELECT num_rata, 0 val_imp, val_ban
      FROM table2
      WHERE num_contract = 2988) v
GROUP BY num_rata;

答案 1 :(得分:1)

我认为这就是你想要的:

select 
    t1.num_rata, 
    SUM(t1.val_imp*0.01) AS amount1,
    SUM(t2.val_ban*0.01) AS amount2
from
    table1 t1 right outer join table2 t2 on t1.num_rata=t2.num_rata
where
    t1.col1<>0 and
    t1.num_contract = 88 and 
    t2.num_contract = 2988
GROUP BY t1.num_rata

答案 2 :(得分:0)

你可以尝试这样做:

SELECT num_rata, (
    coalesce(
        (SELECT SUM(val_imp*0.01) FROM table1 t1 WHERE t1.num_rata = foo.num_rata)
    ,0)
) as col1, (
    coalesce(
        (SELECT SUM(val_ban*0.01) FROM table2 t2 WHERE t2.num_rata = foo.num_rata)
    ,0)
) as col2 FROM
(
    (SELECT num_rata FROM table1 WHERE col1 <> 0 AND num_contract = 88)
    UNION ALL
    (SELECT num_rata FROM table2 WHERE num_contract = 2988)
) as foo;

我可能有语法错误(我是从大学讲座中写的),但这个(或类似的)应该可以解决问题。