|
|
|
| Две таблицы "ta" и "tb" (tb - подчиненая, связь по ключевому полю aID таблицы ta).
Поля таблиц:
ta:aID, a1
tb:bID, aID,b1
Подскажите как составить запрос вычисляющий значение:
a1-sum(b1), суммирование для каждого aID. | |
|
| |
|
|
|
| примерно так:
SELECT ta.aid, ta.a1-derivedtbl.sumb1 AS itog
FROM ta INNER JOIN [SELECT tb.aid, Sum(tb.b1) AS sumb1
FROM tb
GROUP BY tb.aid]. AS derivedtbl ON ta.aid = derivedtbl.aid; | |
|
| |
|
|
|
| Возможно ли сделать это с "IN" или в поле запроса вставить запрос? | |
|
| |
|
|
|
| вот непонятка:
здесь вложенный запрос, который и вычисляет нужную Вам сумму. | |
|
| |
|
|
|
| А что если не для всех записей основной таблицы есть записи в подчиненной, сумма подчиненой будет NULL. Возникнут проблемы с вычислением разницы? | |
|
| |
|
|
|
| могут
надо использовать опреатор IIF, чтобы перевести NULL в "0" | |
|
| |
|
|
|
| тут надо с лефт джоин, иначе некоторые записи могут пропасть
SELECT ta.aid, ta.a1-derivedtbl.sumb1 AS itog
FROM ta LEFT JOIN [SELECT tb.aid, Sum(tb.b1) AS sumb1
FROM tb
GROUP BY tb.aid]. AS derivedtbl ON ta.aid = derivedtbl.aid
|
| |
|
| |
|
|
|
| Зачем точка после правой квадратной скобки? | |
|
| |
|
|
|
| вообще там обычные скобки стоят, просто сам Access потом почему то правит так
SELECT ta.aid, ta.a1-derivedtbl.sumb1 AS itog
FROM ta LEFT JOIN (SELECT tb.aid, Sum(tb.b1) AS sumb1
FROM tb
GROUP BY tb.aid) AS derivedtbl ON ta.aid = derivedtbl.aid
|
| |
|
| |
|
|
|
| Если добавить еще одну подчиненную таблицу tc, связь с основной ta по полю aid.
Как вычислить разность:
a1-sum(b1) - sum(с1),
За предыдущую подсказку спасибо, работает! | |
|
| |