我遇到了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
感谢您的任何提示。
法比安
答案 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;
我可能有语法错误(我是从大学讲座中写的),但这个(或类似的)应该可以解决问题。