У меня есть две таблицы:
t1
(date d, name c(20), debit n(7), credit n(7)
)
t2
(date d, name c(20), type c(25), obal n(7)
)
Вот пример данных.
T1:
DATE NAME DEBIT CREDIT
01.01.12 dad 5000
01.01.12 mum 6000
05.01.12 school 1000
01.02.12 dad 5000
01.02.12 mum 6000
10.02.12 tuition 300
10.02.12 snacks 100
01.03.12 dad 5000
01.03.12 mum 6000
01.03.12 books 500
02.03.12 rice 500
02.03.12 vegetables 900
03.03.12 snacks 100
01.04.12 dad 5000
01.04.12 mum 6000
01.04.12 meat 200
21.04.12 guest 800
Т2:
DATE NAME TYPE OBAL
01.01.12 dr fee medical 8000
01.01.12 medicine medical -10000
01.01.12 dad income 400000
01.01.12 mum income 450000
05.01.12 school education 0
10.02.12 tuition education 0
10.02.12 snacks misc 0
01.03.12 books education 0
02.03.12 rice food 0
02.03.12 vegetables food 0
01.04.12 meat food 0
21.04.12 guest misc 0
Ожидается сумма (obal + credit - debit) для каждого имени, сгруппированного по типу (t2). Используемый запрос и полученный результат:
SELECT
t2.type, obal + SUM(NVL(credit - debit, 0)) as bal
FROM t2
LEFT JOIN t1 ON t2.name = t1.name
GROUP BY
t2.type, t2.obal
Результаты:
TYPE BAL
education -1800
food -1600
income 420000
income 474000
medical -10000
medical 8000
misc -1000
У меня такой вопрос: почему type income
и medical
появляются дважды в выводе запроса, несмотря на использование предложения GROUP BY? Я попытался добавить предложение DISTINCT перед столбцом t2.type , и это тоже выдает тот же результат! Я мог бы заметить, что две записи типа medical
в таблице t2 не имеют записей в t1 , совпадающих с одинаковым именем и две записи типа типа income
имеют ненулевое значение obal в t2 . Пожалуйста, помогите мне преодолеть эту проблему.