|  24.02.2012, 10:49 | #1 | 
| Участник |  Выборка сумм из двух таблиц 
			
			Есть простенький select: X++: while select sum(InvoiceAmount) from vendInvoiceJour group by InvoiceId join sum(LineAmount) from vendInvoiceTrans where vendInvoiceTrans.InvoiceId == vendInvoiceJour.InvoiceId ... {.... При выводе будем получать корректный LineAmount, но InvoiceAmount будет во столько раз больше, сколько строк в накладной, ну вы поняли=) Можно ли как-то одним select по этим двум таблицам получить корректные суммы? (в T-SQL такой запрос можно сделать с помощью UNION) | 
|  | 
|  24.02.2012, 10:57 | #2 | 
| Ищущий знания... | 
			
			Правильно ли я понял, что необходимо одним запросом получить суммы по накладным (в разрезе накладных) и суммы строк по ним (наверное что бы сравнить)   если да, то я бы сделал так: X++: while select vendInvoiceJour group by InvoiceId, InvoiceDate, InvoiceAccount, InvoiceAmount // добавил дату и поставщика, т.к. у разных поставщиков может быть один номер накладной, в итоге сгруппируется не правильно join sum(LineAmount) from vendInvoiceTrans where vendInvoiceTrans.InvoiceId == vendInvoiceJour.InvoiceId 
				__________________ "Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем | 
|  | |
| За это сообщение автора поблагодарили: S.Kuskov (2), propeller (1). | |
|  24.02.2012, 10:57 | #3 | 
| Moderator | 
			
			Создать два view с суммами, группировкой по invoiceId, и суммой и invoiceId в списке полей. Потом из заджойнить. Можно даже еще одно view сделать поверх этих двух - чтобы пользователи его смогли напрямую в форме просматривать, без возни со временной таблицей... P.S. Хотя по сути lev прав - бессмысленно сумировать vendInvoiceJour в разрезе invoiceId. Ну конечно если не хочется получить сумму всех накладных с одинаковым номером независимо от поставщика... | 
|  | 
|  24.02.2012, 11:02 | #4 | 
| Участник | 
			
			А может проще не суммировать по полю InvoiceAmount а группировать по нему   X++: while select vendInvoiceJour group by InvoiceId, InvoiceAmount join sum(LineAmount) from vendInvoiceTrans where vendInvoiceTrans.InvoiceId == vendInvoiceJour.InvoiceId ... {.... | 
|  | 
|  24.02.2012, 11:06 | #5 | 
| Участник | Цитата: 
		
			Сообщение от lev
			   Правильно ли я понял, что необходимо одним запросом получить суммы по накладным (в разрезе накладных) и суммы строк по ним (наверное что бы сравнить)   Мне кажется тут не нужен sum по шапкам накладных, а достаточно просто сгруппировать по суммам, т.к. мы все равно группируем в разрезе каждой накладной. Интересное решение группировка по сумме, я что-то не догадался))). спасибо! | 
|  | 
|  24.02.2012, 14:45 | #6 | 
| Участник | 
			
			Эхх.. моя ошибка, неправильный я написал select. C InvoiceId все просто. а если так: X++: while select sum(InvoiceAmount) from vendInvoiceJour group by InvoiceAccount join sum(LineAmount) from vendInvoiceTrans where vendInvoiceTrans.InvoiceId == vendInvoiceJour.InvoiceId { ....  Как тут быть?   | 
|  | 
|  24.02.2012, 14:49 | #7 | 
| Участник | 
			
			Не обязательно группировать по сумме накладной. Можно брать ее максимум или минимум. X++: while select maxOf(InvoiceAmount) from vendInvoiceJour group by InvoiceId join sum(LineAmount) from vendInvoiceTrans where vendInvoiceTrans.InvoiceId == vendInvoiceJour.InvoiceId ... {.... 
				__________________ - Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... | 
|  | 
|  24.02.2012, 15:01 | #8 | 
| Участник | Цитата: 
		
			Сообщение от propeller
			   Эхх.. моя ошибка, неправильный я написал select. C InvoiceId все просто. а если так: X++: while select sum(InvoiceAmount) from vendInvoiceJour group by InvoiceAccount join sum(LineAmount) from vendInvoiceTrans where vendInvoiceTrans.InvoiceId == vendInvoiceJour.InvoiceId { ....  Как тут быть?  
				__________________ - Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... | 
|  | 
|  24.02.2012, 15:37 | #9 | 
| Участник | Цитата: Я же хочу спросить у вас для чего вы дважды считаете суммы и по строкам и по шапкам? Вы ожидаете увидеть там разные значения? Вы ищете ошибки в данных? Тогда группировка по InvoiceId совсем не лишняя. | 
|  |