2012-06-04 2 views
3

У меня есть две таблицы (входы и категории):SQLITE: Показать всего (сумма) для каждой категории

CREATE TABLE categories (
    iId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
    sName TEXT NOT NULL, 
    iParent INTEGER, 
    FOREIGN KEY (iParent) REFERENCES categories(iId) 
); 

CREATE TABLE inputs (
    iId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
    iCategory INTEGER, 
    dValue DOUBLE NOT NULL, 
    FOREIGN KEY (iCategory) REFERENCES categories(iId) 
); 

Мне нужно получить суммы (столбец dValue) из таблицы входов для каждой категории. Даже если результат суммы равен нулю.

Если это возможно, было бы лучше, если бы я мог получить сумму для каждого родителя Категория (при categories.iId = categories.iParent, суммируя результаты дочерних категорий в родительской категории)

Может кто-нибудь мне помочь? Я ценю любую помощь! Спасибо!

+0

Во второй части (комбинируя дочерние категории с одним из родителей) - сколько уровней глубока ваша вложенной иерархии категорий? – mellamokb

+1

привет, только один вложенный уровень – Daniel

+0

Возможно ли, что вы могли бы предоставить образец данных с ожидаемым выходом, который охватывает все возможные случаи краев (родительский с дочерней категорией, родительский без дочерней категории, категория без входных данных и т. Д.)? – mellamokb

ответ

3

Попробуйте это:

select c.iParent, sum(i.dValue) 
from categories c 
left outer join inputs i on i.iCategory=c.iId 
group by c.iParent 

EDIT: со счетами:

select c.iParent, a.iCurrency, sum(i.dValue) 
from categories c 
left outer join inputs i on i.iCategory=c.iId 
left outer join accounts a on i.iAccount=a.iId 
group by c.iParent,a.iCurrency 
+1

+1 Интересно, если «Даже если результат суммы равен нулю». OP означает отсутствие входов. В этом случае, вероятно, должно быть 'coalesce (sum (i.dValue), 0)'. – mellamokb

+1

@mellamokb Право - или, может быть, 'sum (coalesce (i.dValue, 0))'. – dasblinkenlight

+0

Вот и все! работал на меня, спасибо всем! – Daniel

Смежные вопросы