Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2017, 12:42   #1
LatyshevAlexey
 
Регистрация: 12.02.2017
Сообщений: 5
По умолчанию Объединить 3 запроса в один

Добрый день!

есть 3 запроса:

select FIOClient as Client, sum(Detail.Quantity*Price.Price) as summ
from ((client inner join sales on Client.IDClient = sales.IDClient)
inner join Detail on sales.IDSales=Detail.IDDetail)
inner join Price on Detail.IDTovar = price.IDprice
group by fioClient

select FIOClient as Client, sum(Detail.Quantity*Price.Price) as summ
from ((client inner join sales on Client.IDClient = sales.IDClient)
inner join Detail on sales.IDSales=Detail.IDDetail)
inner join Price on Detail.IDTovar = price.IDprice
where Price.NDSIn = True
group by fioClient

select FIOClient as Client, sum(Detail.Quantity*Price.Price) as summ
from ((client inner join sales on Client.IDClient = sales.IDClient)
inner join Detail on sales.IDSales=Detail.IDDetail)
inner join Price on Detail.IDTovar = price.IDprice
where Price.NDSIn = False
group by fioClient

Подскажите как их объединить в один запрос, что бы результат был такой:
Изображения
Тип файла: png result.png (6.5 Кб, 60 просмотров)
LatyshevAlexey вне форума Ответить с цитированием
Старый 12.02.2017, 19:29   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Код:
select ...
sum(...*Price.Price) as all_summ,
sum(case when Price.NDSIn = True then ...*Price.Price else 0 end) as withoutnds_umm,
sum(case when Price.NDSIn = false then ...*Price.Price else 0 end) as withnds_summ
....
group by ...
case возможно потребуется заменить на iif или другой оператор ветвления

вариант без case
Код:
select FIOClient as Client, 
sum(Detail.Quantity* TOTAL.Price  ) as summ,
sum(Detail.Quantity* NDSOUT.Price ) as ndsout,
sum(Detail.Quantity* NDSIN.Price  ) as ndsin,
from ....

inner join Price as TOTAL on Detail.IDTovar = TOTAL.IDprice 

LEFT join Price as NDSIN  on Detail.IDTovar = NDSIN.IDprice  and NDSIN.ndsin =true
LEFT join Price as NDSOUT on Detail.IDTovar = NDSOUT.IDprice and NDSOUT.ndsin=false

group by .....
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 13.02.2017 в 09:56.
evg_m на форуме Ответить с цитированием
Старый 13.02.2017, 09:07   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

join ?
ADSoft вне форума Ответить с цитированием
Старый 13.02.2017, 09:34   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
join ?
А что с ним не так?
Цитата:
group by fioClient
Среди клиентов тезок быть не может по определению?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.02.2017, 10:15   #5
LatyshevAlexey
 
Регистрация: 12.02.2017
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Среди клиентов тезок быть не может по определению?
Могут быть и полные тезки, тогда группировать по Client.IDClient, и Client.FIOClient?
LatyshevAlexey вне форума Ответить с цитированием
Старый 14.02.2017, 10:18   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Можно только по Client.IDClient, а фио получать как MAX(fioClient). Можно и по обоим полям, тогда MAX не нужен
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.02.2017, 10:55   #7
LatyshevAlexey
 
Регистрация: 12.02.2017
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Можно только по Client.IDClient, а фио получать как MAX(fioClient). Можно и по обоим полям, тогда MAX не нужен
спасибо, буду пробовать.
в Navicat for MySQL работает, спасибо за помощь......

..... а в Делфи выбает ошибку "AV ... in modile 'idsql32.dll'", что может быть?
LatyshevAlexey вне форума Ответить с цитированием
Старый 14.02.2017, 11:02   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Возможно BDE не правильно настроен, библиотека то его. Для мускула не настраивал, поэтому пас
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 14.02.2017 в 11:05.
Аватар вне форума Ответить с цитированием
Старый 14.02.2017, 13:35   #9
LatyshevAlexey
 
Регистрация: 12.02.2017
Сообщений: 5
По умолчанию

А есть возможность, при использовании способа без case, как то "отловить" результата со значением NULL и присвоить в результате значение "0"? Я так понял что ошибка AV из idsql32.dll появляется именно из-за NULL.
https://www.experts-exchange.com/que...iolations.html
http://www.txsz.net/xs/delphi/2/数据库相...0(BDE).HTM#410

Здесь вроде об этом пишут если я правильно понял.
LatyshevAlexey вне форума Ответить с цитированием
Старый 14.02.2017, 14:06   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

IFNULL же есть, а case все равно потребуется
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединить два кода в один c++\noob Общие вопросы C/C++ 3 08.03.2011 11:21
Как правильно объединить три простых запроса+ в один? NNvan SQL, базы данных 1 08.06.2010 00:04
два запроса, которые нужно объединить в один. andrianov123 БД в Delphi 4 16.05.2008 16:06
как в PhotoShop два файла скеить в один pdf файл? Допустим я нарисовал 2 страницы книги и мне их нужно объединить в один pdf N!ckeL Моделирование, изометрия, photoshop, 3d редакторы 2 15.05.2008 19:34
Объединить в один файл asale Microsoft Office Excel 2 12.02.2008 13:18