2011-11-16 151 views
1

我被困在SQL问题上,我几乎可以肯定这很容易,但我找不到合适的答案。下面是这个例子。我想那些2个查询组合:组合2个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 

作为最后一个结果我想要一些东西e此:

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 

谢谢你的任何提示。

fabien。

回答

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; 
+0

谢谢马克,但对不起,我不明白...... – feub

+0

@feub,哪一点你不明白?另外,你是否尝试过运行它(或者真实情况更复杂)? –

+0

例如,在'SELECT num_rata,val_imp,0 val_ban'中,我没有得到语法'0 val_ban'。而'v'是一个错字?谢谢。 – feub

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; 

我可能有语法错误(我从一所大学演讲写这个),不过这(或类似)应该做的伎俩。

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 
+1

我同在一处同意一个外连接问题,但我觉得它应该是一个正确的外连接,因为她需要第二个表中的所有记录。看到这里的一些例子左外部和右外部连接:http://en.wikipedia.org/wiki/Join_%28SQL%29 – user998692

+0

我同意,谢谢...早上太早 - 需要更多的咖啡....: - )(修正了我上面的答案) –

+0

可能是一个完整的外连接。此外,您似乎假定某个表上的给定num_rata存在多个记录的情况下,对于另一个表上的相同num_rata,将永远不会有多于一条记录 - 否则,SUM将被夸大。假设每个表都有自己唯一的ID字段,可以通过将SUM(t1.val_imp * 0.01)更改为SUM(t1.val_imp * 0.01)/ COUNT(DISTINCT COALESCE(t2.id,1))来修复它。 ',val_ban反之亦然。 –