внешнее объединение, функция суммы с группой по функции

-4

У меня есть две таблицы idno

idno      head     head_desc
1 6001-1 medical expense
2 6001-2 pay
3 6001-3 gas expenses

view9

head       receipt    payment
6001-1 5000 1000
6001-2 7000 2000
6001-1 6000 1000

запрос

select i.head, i.head_desc, nvl(sum(v.receipt)-sum(v.payment),0) balance
where
v.head=i.head(+)
group by i.head,i.head_desc

этот запрос должен извлекать все главы в таблице idno и показывает 0 баланс, если запись не найдена как внешнее соединение. но выход против этого.

спросил(а) 2021-01-19T16:01:12+03:00 2 месяца, 3 недели назад
1
Решение
88

Я не знаю, какую СУБД вы используете... Но я думаю, вы используете Oracle. Я рекомендую вам не использовать (+) оператор, потому что это не стандартный способ выражения операции соединения.

Я думаю, вы хотели распечатать каждую строку в таблице idno, а если нет v.head, которая имеет значение в таблице idno (например, 6001-3), тогда напечатайте 0 (null) в качестве значения баланса. Это правильно? Left Outer Join означает "распечатывать информацию из каждой строки в левой стороне таблицы. Поэтому, если вы хотите печатать каждый i.head и i.head_desc, вам нужно написать i.head = v.head(+).

В любом случае, я рекомендую использовать ключевое слово LEFT OUTER JOIN.

ответил(а) 2021-01-19T16:01:12+03:00 2 месяца, 3 недели назад
44

Запрос:

SELECT idno.head, head_desc, COALESCE(SUM(receipt)-SUM(payment),0) AS balance
FROM idno LEFT OUTER JOIN view9 ON idno.head=view9.head
GROUP BY idno.head, head_desc

ответил(а) 2021-01-19T16:01:12+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема