Объединить 2 запроса SQL - PullRequest
       8

Объединить 2 запроса SQL

1 голос
/ 16 ноября 2011

Я застрял в проблеме SQL, я почти уверен, что это все легко, но я не могу найти правильный ответ.Ниже приведен пример.Я хочу объединить эти 2 запроса:

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

Спасибо за любую подсказку.

fabien.

Ответы [ 3 ]

3 голосов
/ 16 ноября 2011

Вы можете использовать объединение или внешнее объединение - я бы предпочел объединение, например:

1 голос
/ 16 ноября 2011

Я думаю, это то, что вы хотите:

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
0 голосов
/ 16 ноября 2011

Можете ли вы попробовать, что это будет делать:

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;

У меня может быть синтаксическая ошибка (я пишу это из лекции в университете), но это (или подобное) должно сработать.

...