приход минус расход равно остаток

AlexeyGantsev
Дата: 19.10.2019 17:11:30
Доброго времени суток всем.
есть две таблицы Sql : Prihod и Rashod
структура почти одинакова
Наименование товара (Name), Количество (Quantity), Склад (Sklad) и еще поля, которые в данном запросе не нужны
пишу на Delphi 7 пытаюсь составить sql запрос, который позволит вычислить остаток товара на определенном складе.
в таблице прихода (Prihod) есть Name - Рубашка с Sum(Quantity) = 30 и в таблице расхода (Rashod) есть Name - Рубашка с Sum(Quantity) = 20
нужно вычесть и положить в DBGrid

ADOQuery1.SQL.Add('select Prihod.Name, Sum(Prihod.Quantity) from Prihod where Prihod.Sklad = ' + '''' + Form2.ComboBox1.Text + ''' Group by Name Union select Rashod.Name, -Sum(Rashod.Quantity) from Rashod where Rashod.Sklad = ' + '''' + Form2.ComboBox1.Text + ''' Group by Name');

проблема в том, что выводит данные в следующем виде:
рубашка 30
рубашка -20

ну и по другим наименованиям товара тоже также...
результат нужен такой:
Рубашка 10
ёёёёё
Дата: 19.10.2019 17:14:42
DimaBr
Дата: 19.10.2019 17:48:44
select X.Name, Sum(P.Quantity) 
from (
  select P.Name, P.Quantity from Prihod P where P.Sklad = :S
  union all
  select R.Name, -R.Quantity from Rashod R where R.Sklad = :S) X
group by X.Name
AlexeyGantsev
Дата: 19.10.2019 20:04:03
спасибо, обязательно изучу

ёёёёё
AlexeyGantsev,

https://www.sql.ru/docs/sql/u_sql/index.shtml
AlexeyGantsev
Дата: 19.10.2019 20:07:08
пишет ошибку: Неправильно определен объект Parameter, представлены несогласованные или неполные сведения...

ЗЫ. правильно ли я понял, что S - стринговое значение моего склада, которое я выбираю из комбобокса?

DimaBr
select X.Name, Sum(P.Quantity) 
from (
  select P.Name, P.Quantity from Prihod P where P.Sklad = :S
  union all
  select R.Name, -R.Quantity from Rashod R where R.Sklad = :S) X
group by X.Name
ёёёёё
Дата: 19.10.2019 20:13:46
AlexeyGantsev,

гугли "SQL запросы с параметрами", например - http://ebooks.semgu.kz/content.php?cont=r;1641
softwarer
Дата: 19.10.2019 20:14:31
AlexeyGantsev
есть две таблицы Sql : Prihod и Rashod

1. Это на одну таблицу больше, чем нужно
2. Отлаживать запросы в Delphi - не лучший выбор
3. За имена типа ADOQuery1 надо убивать
4. Динамическое формирование SQL здесь нафиг не нужно
5. Хакеры всего мира благодарят тебя за предоставленные возможности по внедрению.

Это если сходу наиболее очевидные ошибки
AlexeyGantsev
Дата: 19.10.2019 20:29:39
Наверняка Вы правы, но моя задача не стоит собрать что то масштабное, за что меня хакеры всего мира будут благодарить :)
в общем необходимо реализовать именно так.

softwarer
AlexeyGantsev
есть две таблицы Sql : Prihod и Rashod

1. Это на одну таблицу больше, чем нужно
2. Отлаживать запросы в Delphi - не лучший выбор
3. За имена типа ADOQuery1 надо убивать
4. Динамическое формирование SQL здесь нафиг не нужно
5. Хакеры всего мира благодарят тебя за предоставленные возможности по внедрению.

Это если сходу наиболее очевидные ошибки
AlexeyGantsev
Дата: 19.10.2019 20:32:52
Еще вот такое придумал, выдает один вариант, но при подключении второй таблицы (Rashod) сумма прихода возрастает в 4 раза, откуда берутся цифры непонятно :) может у кого-нибудь есть идеи, почему происходит так?

ADOQuery1.SQL.Add('select Prihod.Name, Sum(Prihod.Quantity) - Sum(Rashod.Quantity) from Prihod, Rashod where Rashod.Sklad = ' + '''' + ComboBox1.Text + ''' Group By Prihod.Name');
ёёёёё
Дата: 19.10.2019 20:33:59
AlexeyGantsev
Еще вот такое придумал, выдает один вариант, но при подключении второй таблицы (Rashod) сумма прихода возрастает в 4 раза, откуда берутся цифры непонятно :) может у кого-нибудь есть идеи, почему происходит так?
...


21997991

И не возвращайся, пока.