SELECT Pay_Client_ID, Input_Client_ID, Client_ID, Client_Name, "
"SUM(Pay_Sum) AS Balans_Sum, SUM(Input_Goods_In * Input_Goods_Ves * Input_Goods_Col) AS Balans_Input "
"FROM Pay.db, Client.db, Input.db "
"WHERE Pay_Client_ID = Client_ID AND Pay_Client_ID = Input_Client_ID "
"GROUP BY Pay_Client_ID, Input_Client_ID, Client_ID, Client_Name ORDER BY Client_Name";
Вложенные запросы в BDE Query
Вот как я делаю, результат выходит неверный (сумма не верная), может я гдето ошибся
Код:
Таблици прикрепляю
Вот как я делаю, результат выходит неверный (сумма не верная), может я гдето ошибся
Код:
SELECT Pay_Client_ID, Input_Client_ID, Client_ID, Client_Name, "
"SUM(Pay_Sum) AS Balans_Sum, SUM(Input_Goods_In * Input_Goods_Ves * Input_Goods_Col) AS Balans_Input "
"FROM Pay.db, Client.db, Input.db "
"WHERE Pay_Client_ID = Client_ID AND Pay_Client_ID = Input_Client_ID "
"GROUP BY Pay_Client_ID, Input_Client_ID, Client_ID, Client_Name ORDER BY Client_Name";
"SUM(Pay_Sum) AS Balans_Sum, SUM(Input_Goods_In * Input_Goods_Ves * Input_Goods_Col) AS Balans_Input "
"FROM Pay.db, Client.db, Input.db "
"WHERE Pay_Client_ID = Client_ID AND Pay_Client_ID = Input_Client_ID "
"GROUP BY Pay_Client_ID, Input_Client_ID, Client_ID, Client_Name ORDER BY Client_Name";
Таблици прикрепляю[/QUOTE]
Вложенные запросы делать можно.. Так что смотри "где ошибся"..
Может поможеш с запросами, бо я запутался по полной :(
Пример кинь небольшой
Скорее всего, сумма получается неверной из-за null-значений. Надо "sum (<выражение умножения>)" заменить на "sum(поле) * sum(поле) * sum(поле)".
Согласно стандартам SQL, результат вычисления арифметического выражения с null-ами неопределен. Sum же, напротив, всегда возвращает результат, даже если он 0.
Согласно стандартам SQL, результат вычисления арифметического выражения с null-ами неопределен. Sum же, напротив, всегда возвращает результат, даже если он 0.[/QUOTE]
Теже яйца, только вид с боку.
Результат тот же :(
Тогда расскажи по-русски, что хочешь получить.
Результат тот же :([/QUOTE]
Результат тот же, если ти не проверяешь значение на нулл - если же:
Код:
sum(case поле when is null then 0 else поле end)
Неправда твоя. Sum это делает автоматом, о чем я и писал. Учите матчасть. У него наверняка проблемы с группировкой.
Хм. Туплю. :)
Тут действительно проблемы скорей всего с группировкой - опиши что должно быть в результате.
Тут действительно проблемы скорей всего с группировкой - опиши что должно быть в результате.[/QUOTE]
Я специально добавил таблици, что б можно было посмотреть.
Вот что должно по записи "Вася"
№|Имя |Баланс
2 |Вася|925
А вот что есть:
№|Имя |Баланс
2 |Вася|1850
И не могу понять в чём дело... :(
Наверно что то делаю не так
[/QUOTE]
Не смотря на общуюю корявость - все работает так как и должно - по крайней мере в тех двух таблицах что ты выложил. Скорей всего - ошибка в третьей таблице - там одной записи в таблице клиент соответствует две записи товара - или что то типа того. В связи с этим у тебя и происходит задвоение суммы. Будет три товара - будет затроение ну и т.д. :)
Вобщем проблема в неверной структуре базы.
Вобщем проблема в неверной структуре базы.[/QUOTE]
Ну так для этого ж и есть рупировка, что б групировались записи...
СЛучайно забыл третию табличку, прикрепляю её
Код:
select * from client.db inner join input.db on input_client_id = client_id
inner join Pay.db on pay_client_id = client_id
where client_id = 2
inner join Pay.db on pay_client_id = client_id
where client_id = 2
или вот еще вариант:)
Код:
select (select sum(Pay_Sum) from pay where pay_client_id = client.db.client_id) as Summ, client_name from client.db inner join input.db on input_client_id = client_id
where client_id = 2
where client_id = 2
а вот и причина
Код:
select * from input.db
where input_client_id = 2
where input_client_id = 2