Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вложенные запросы в BDE Query

305
23 июня 2006 года
Kashuk
385 / / 21.02.2003
Можно ли в бде делать вложеные запросы, к примеру, есть разные таблицы, с них нужно сделать выборку, и представить это всё в одной таблице.

Вот как я делаю, результат выходит неверный (сумма не верная), может я гдето ошибся
 
Код:
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";


Таблици прикрепляю
263
23 июня 2006 года
koltaviy
816 / / 16.12.2004
[QUOTE=Kashuk]Можно ли в бде делать вложеные запросы, к примеру, есть разные таблицы, с них нужно сделать выборку, и представить это всё в одной таблице.

Вот как я делаю, результат выходит неверный (сумма не верная), может я гдето ошибся
 
Код:
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";


Таблици прикрепляю[/QUOTE]
Вложенные запросы делать можно.. Так что смотри "где ошибся"..
305
23 июня 2006 года
Kashuk
385 / / 21.02.2003
[QUOTE=koltaviy]Вложенные запросы делать можно.. Так что смотри "где ошибся"..[/QUOTE]

Может поможеш с запросами, бо я запутался по полной :(
Пример кинь небольшой
10
23 июня 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE=Kashuk]Может поможеш с запросами, бо я запутался по полной :([/QUOTE]
Скорее всего, сумма получается неверной из-за null-значений. Надо "sum (<выражение умножения>)" заменить на "sum(поле) * sum(поле) * sum(поле)".

Согласно стандартам SQL, результат вычисления арифметического выражения с null-ами неопределен. Sum же, напротив, всегда возвращает результат, даже если он 0.
305
24 июня 2006 года
Kashuk
385 / / 21.02.2003
[QUOTE=Freeman]Скорее всего, сумма получается неверной из-за null-значений. Надо "sum (<выражение умножения>)" заменить на "sum(поле) * sum(поле) * sum(поле)".

Согласно стандартам SQL, результат вычисления арифметического выражения с null-ами неопределен. Sum же, напротив, всегда возвращает результат, даже если он 0.[/QUOTE]

Теже яйца, только вид с боку.
Результат тот же :(
10
24 июня 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE=Kashuk]Теже яйца, только вид с боку.[/QUOTE]
Тогда расскажи по-русски, что хочешь получить.
1
24 июня 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=Kashuk]Теже яйца, только вид с боку.
Результат тот же :([/QUOTE]
Результат тот же, если ти не проверяешь значение на нулл - если же:
 
Код:
sum(case поле when is null then 0 else поле end)
10
24 июня 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE=kot_]sum(case поле when is null then 0 else поле end)[/QUOTE]
Неправда твоя. Sum это делает автоматом, о чем я и писал. Учите матчасть. У него наверняка проблемы с группировкой.
1
25 июня 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=Freeman]Неправда твоя. Sum это делает автоматом, о чем я и писал. Учите матчасть. У него наверняка проблемы с группировкой.[/QUOTE]
Хм. Туплю. :)
Тут действительно проблемы скорей всего с группировкой - опиши что должно быть в результате.
305
26 июня 2006 года
Kashuk
385 / / 21.02.2003
[QUOTE=kot_]Хм. Туплю. :)
Тут действительно проблемы скорей всего с группировкой - опиши что должно быть в результате.[/QUOTE]

Я специально добавил таблици, что б можно было посмотреть.
Вот что должно по записи "Вася"
№|Имя |Баланс
2 |Вася|925
А вот что есть:
№|Имя |Баланс
2 |Вася|1850

И не могу понять в чём дело... :(
Наверно что то делаю не так
1
27 июня 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=Kashuk]Я специально добавил таблици, что б можно было посмотреть.
[/QUOTE]
Не смотря на общуюю корявость - все работает так как и должно - по крайней мере в тех двух таблицах что ты выложил. Скорей всего - ошибка в третьей таблице - там одной записи в таблице клиент соответствует две записи товара - или что то типа того. В связи с этим у тебя и происходит задвоение суммы. Будет три товара - будет затроение ну и т.д. :)
Вобщем проблема в неверной структуре базы.
305
27 июня 2006 года
Kashuk
385 / / 21.02.2003
[QUOTE=kot_]Не смотря на общуюю корявость - все работает так как и должно - по крайней мере в тех двух таблицах что ты выложил. Скорей всего - ошибка в третьей таблице - там одной записи в таблице клиент соответствует две записи товара - или что то типа того. В связи с этим у тебя и происходит задвоение суммы. Будет три товара - будет затроение ну и т.д. :)
Вобщем проблема в неверной структуре базы.[/QUOTE]

Ну так для этого ж и есть рупировка, что б групировались записи...
СЛучайно забыл третию табличку, прикрепляю её
1
27 июня 2006 года
kot_
7.3K / / 20.01.2000
Ну так дык и групируется. Все выводится правильно. Возьми и выполни следующий запрос и ты поймешь где ты ошибся
 
Код:
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

или вот еще вариант:)
 
Код:
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

а вот и причина
 
Код:
select * from   input.db  
where input_client_id = 2
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог