Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запрос подчиненый?
 
 автор: nicolas   (20.06.2007 в 13:35)   личное сообщение
 
 

Две таблицы "ta" и "tb" (tb - подчиненая, связь по ключевому полю aID таблицы ta).
Поля таблиц:
ta:aID, a1
tb:bID, aID,b1
Подскажите как составить запрос вычисляющий значение:
a1-sum(b1), суммирование для каждого aID.

  Ответить  
 
 автор: Gыwи   (20.06.2007 в 14:12)   личное сообщение
 
 

примерно так:
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;

  Ответить  
 
 автор: nicolas   (20.06.2007 в 14:29)   личное сообщение
 
 

Возможно ли сделать это с "IN" или в поле запроса вставить запрос?

  Ответить  
 
 автор: ДрЮня   (20.06.2007 в 15:16)   личное сообщение
 
 

вот непонятка:
здесь вложенный запрос, который и вычисляет нужную Вам сумму.

  Ответить  
 
 автор: nicolas   (21.06.2007 в 18:06)   личное сообщение
 
 

А что если не для всех записей основной таблицы есть записи в подчиненной, сумма подчиненой будет NULL. Возникнут проблемы с вычислением разницы?

  Ответить  
 
 автор: ДрЮня   (21.06.2007 в 19:07)   личное сообщение
 
 

могут
надо использовать опреатор IIF, чтобы перевести NULL в "0"

  Ответить  
 
 автор: ГлазастыйМышь   (22.06.2007 в 07:43)   личное сообщение
 
 

тут надо с лефт джоин, иначе некоторые записи могут пропасть

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

  Ответить  
 
 автор: nicolas   (22.06.2007 в 15:17)   личное сообщение
 
 

Зачем точка после правой квадратной скобки?

  Ответить  
 
 автор: ГлазастыйМышь   (22.06.2007 в 15:28)   личное сообщение
 
 

вообще там обычные скобки стоят, просто сам 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 

  Ответить  
 
 автор: nicolas   (23.06.2007 в 16:14)   личное сообщение
 
 

Если добавить еще одну подчиненную таблицу tc, связь с основной ta по полю aid.
Как вычислить разность:
a1-sum(b1) - sum(с1),
За предыдущую подсказку спасибо, работает!

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList