Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
3 / 3 / 0
Регистрация: 26.03.2010
Сообщений: 45

Сумма по двум таблицам....

08.10.2010, 09:28. Показов 1818. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здраствуйте у меня возникла проблемма, есть 2 таблицы в БД, таблицы имеют одинаковые поля sum, price,kol, подскажите как из двух таблиц найти сумму полей SUM и KOL за определенную дату если бы запрос был бы из одной базы я бы написал

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
DM.ARH.Active:=false;
 DM.ARH.SQL.Clear;
  DM.ARH.SQL.Add('select SKLADARH.NAME, sum(SUMMA), sum(KOL), SKLADARH.SHET, SKLADARH.PRICE');
  DM.ARH.SQL.add('from "SKLADARH"');
  DM.ARH.SQL.add('WHERE DATE_D  >= :D');
  DM.ARH.SQL.add('and DATE_D  <= :R');
    DM.ARH.SQL.add('and FLAG like ''' +'%'+'2'+'%''');
    DM.ARH.SQL.add('group by NAME,SHET,PRICE');
 DM.ARH.Parameters.ParamValues['D'] := formatdatetime('yyyy.mm.dd', (datetimepicker2.Date));
 DM.ARH.Parameters.ParamValues['R'] := formatdatetime('yyyy.mm.dd', (datetimepicker3.Date));
 DM.ARH.Active:=true;
mainform.Cursor:=crDefault;
DM.RHD.showreport;
но мне нужно вывести из вдух таблиц.....
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.10.2010, 09:28
Ответы с готовыми решениями:

Динамический запрос к двум таблицам IBQuery
procedure TForm1.Button3Click(Sender: TObject);//Динамический запрос к двум таблицам begin dm.Q.SQL.Clear; dm.Q.SQL.Add('select name...

Фильтрация одного значения по двум связанным ADO таблицам
К проблеме. -- Существует 2 связанных таблицы. В 1 - записи типа анкеты человека, где указанны его фамилия, имя и другое. В 2 -...

Поиск по двум таблицам с одинаковыми полями через ADOQuery
На данный момент есть база данных Access, в ней - две таблицы (Table1, Table2), в каждой из них есть одинаковые поля - &quot;IMEI&quot; и...

9
64 / 64 / 10
Регистрация: 19.10.2009
Сообщений: 234
08.10.2010, 11:24
Если с двух разных БД то только поотдельности, если из одной БД но из разных таблиц то что то вроде того
SQL
1
2
3
4
5
SELECT 
   'Твоя дата' AS SumDat,
   (SELECT SUM(SUM) FROM table1 WHERE Дата =  'Твоя дата') + (SELECT SUM(SUM) FROM table2 WHERE Дата =  'Твоя дата') AS Sumsum,
   (SELECT SUM(price) FROM table1 WHERE Дата =  'Твоя дата') + (SELECT SUM(price) FROM table2 WHERE Дата =  'Твоя дата') AS Sumprice,
   (SELECT SUM(kol) FROM table1 WHERE Дата =  'Твоя дата') + (SELECT SUM(kol) FROM table2 WHERE Дата =  'Твоя дата') AS Sumkol
'Твоя дата' - дата за какое число надо вывести
table1 - первая таблица
table2 - вторая таблица

Дата - поле в котором храниться дата
1
 Аватар для Sergiuz
161 / 159 / 39
Регистрация: 10.10.2010
Сообщений: 461
10.10.2010, 01:15
Цитата Сообщение от Larsus Посмотреть сообщение
Если с двух разных БД то только поотдельности, если из одной БД но из разных таблиц то что то вроде того
SQL
1
2
3
4
5
SELECT 
   'Твоя дата' AS SumDat,
   (SELECT SUM(SUM) FROM table1 WHERE Дата =  'Твоя дата') + (SELECT SUM(SUM) FROM table2 WHERE Дата =  'Твоя дата') AS Sumsum,
   (SELECT SUM(price) FROM table1 WHERE Дата =  'Твоя дата') + (SELECT SUM(price) FROM table2 WHERE Дата =  'Твоя дата') AS Sumprice,
   (SELECT SUM(kol) FROM table1 WHERE Дата =  'Твоя дата') + (SELECT SUM(kol) FROM table2 WHERE Дата =  'Твоя дата') AS Sumkol
'Твоя дата' - дата за какое число надо вывести
table1 - первая таблица
table2 - вторая таблица

Дата - поле в котором храниться дата
КРАСИВО
0
3 / 3 / 0
Регистрация: 26.03.2010
Сообщений: 45
11.10.2010, 16:17  [ТС]
Путаюсь выполнить кусок кода для начала

Code
1
2
3
4
SELECT 
(SELECT SUM(sklad.kol) FROM sklad ) + (SELECT SUM(skladarh.kol) FROM skladarh WHERE flag =  '1') AS SumALL
 from skladarh, sklad
group by sklad.name
Выдает неверные данные

1. цифры одинаковае во всех строках
2. названия дублируются

Добавлено через 56 минут
Этот запрос складывает все значения в таблице sklad + все значения в таблице Skladarh.

А как сделать чтобы они не складывались а складывались тока значения записей например

В таблице Sklad есть запись:

__________________________________
name | kol | price| shet| date |
Кирпичи |10 |500 | 123 | 10.10.2010|
масло 10 150 | 256| 09.10.2010|
__________________________________

и в таблице SkladArh есть такая же запись


_______________________________________
name | kol | price| shet| date |Flag |
Кирпичи |5 | 250 | 123 |10.10.2010| 1 |
масло | 10 | 150 | 256| 09.10.2010| 1
Шпагат | 3 | 15 | 276| 08.10.2010| 1
_______________________________________


как наити сумму каждой отдельной записи в таблицах

тоесть толжен получится токаой рещзультат:
__________________________________
name | kol | price| shet| date |
Кирпичи | 15 |750 | 123 |10.10.2010| |
масло | 20 | 300 | 256| 09.10.2010|
Шпагат | 3 | 15 | 276| 08.10.2010|
__________________________________
0
64 / 64 / 10
Регистрация: 19.10.2009
Сообщений: 234
12.10.2010, 07:41
SQL
1
2
3
4
5
6
SELECT 
 skladarh.name,
 SUM(skladarh.kol) + SUM(sklad.kol) AS SumALL
 FROM skladarh
 LEFT JOIN DRIVER ON (skladarh.name = sklad.name)
GROUP BY skladarh.name
Попробуй тогда что то вроде этого
0
3 / 3 / 0
Регистрация: 26.03.2010
Сообщений: 45
12.10.2010, 09:07  [ТС]
Ругается на:

Code
1
 LEFT JOIN [U]DRIVER[/U] ON (skladarh.name = sklad.name)
0
64 / 64 / 10
Регистрация: 19.10.2009
Сообщений: 234
12.10.2010, 09:19
Цитата Сообщение от Dead_Gigabit Посмотреть сообщение
Ругается на:

Code
1
 LEFT JOIN [U]DRIVER[/U] ON (skladarh.name = sklad.name)
Блин чувак сорри, заместо DRIVER напиши sklad просто я в первой попавшейся у себя базе делал а там таблица DRIVER называлась вот и не до конца отредактировал
0
3 / 3 / 0
Регистрация: 26.03.2010
Сообщений: 45
12.10.2010, 09:46  [ТС]
О спасибо заработало но почемуто в некоторых полях отображается Null а если сложить значение Sklad.kol + Skladarh то должно быть значение (прекрепил скрин).
А если я попрошу помочь ещё с усложненной версией запроса (обещаю последняя просьба)

Таблица Sklad это таблица материалов на складе,
Таблица SKLADARH это таблица архива действий с материалами расхода и прихода.

Расход и приход различаются по полю FLAG в таблице SKLADARH

flag=1 - Приход.
flag=2 - Расход.

Поле Kol и SUM в таблице SKLADARH с Flag=1 Обозначим (а,s) соответственно
Поле Kol и SUM в таблице SKLADARH с Flag=2 Оборзначим (в,d) соответственно
Поле KOL и SUM в таблице SKLAD обозначим (с,f) соответственно

Как наити:
C+A-B как KolAll
S+F-D как SumAll
Миниатюры
Сумма по двум таблицам....  
0
64 / 64 / 10
Регистрация: 19.10.2009
Сообщений: 234
12.10.2010, 10:09
из
Цитата Сообщение от Dead_Gigabit Посмотреть сообщение
Таблица Sklad это таблица материалов на складе,
Таблица SKLADARH это таблица архива действий с материалами расхода и прихода.
могу тебе сказать что правильнее было бы изменить немного структуру таблиц а то в дальнейшем стоит тебе в одной поменять название товара и целостность данных потеряется

т.е лучше будет если ты в первой таблице добавишь поле id а во второй уже не будешь писать название товара а будешь просто записывать id из первой таблицы

__________________________________
id | name | kol | price| shet| date |
1 | Кирпичи |10 |500 | 123 | 10.10.2010|
2 |масло 10 150 | 256| 09.10.2010|
__________________________________

и в таблице SkladArh есть такая же запись
_______________________________________
idтовара | kol | price| shet| date |Flag |
1 |5 | 250 | 123 |10.10.2010| 1 |
2 | 10 | 150 | 256| 09.10.2010| 1
______________________________________

тогда твой запрос будет такого вида

SQL
1
2
3
4
5
6
7
SELECT
   SUM(SKLAD.kol) + SUM(SKLADARH.kol) - SUM(SKLADARH1.kol) AS KolAll,
SUM(SKLAD.SUMMA) + SUM(SKLADARH.SUMMA) - SUM(SKLADARH1.SUMMA) AS SumAll
FROM
   SKLAD
   LEFT JOIN SKLADARH ON (SKLAD.id = SKLADARH.idтовара AND SKLADARH.Flag = 1)
   LEFT JOIN SKLADARH SKLADARH1  ON (SKLAD.id = SKLADARH1.idтовара AND SKLADARH1.Flag = 2)

ну а если переделывать не хочешь то просто замени SKLAD.id = SKLADARH.idтовара и SKLAD.id = SKLADARH1.idтовара на sklad.name = skladarh.name и klad.name = skladarh1.name соотвественно
0
3 / 3 / 0
Регистрация: 26.03.2010
Сообщений: 45
12.10.2010, 12:52  [ТС]
Хм, опять столбцах "Null" вылетает....

Code
1
2
LEFT JOIN SKLADARH ON (sklad.name = skladarh.name  AND SKLADARH.Flag = 1)
LEFT JOIN SKLADARH SKLADARH1  ON (sklad.name = skladarh1.name AND SKLADARH1.Flag = 2)
и как я понимаю вот этот код групирует записи по записям в таблице SKLAD по полю Name

этого не нада так как записи в таблице SKLAd и Skladarh могут различаться

нужно просто сделать арифм. операции (выше) и сгрупировать по названиям что-бы не поподалось одинаковые названия материалов....

Грубо говоря чтобы он из двух таблиц вытащил все тавары и сделал нужные операции (если нет товара в какой либо из таблиц что бы он считал его равным нулю и подставлял в формулу) а потом сгрупировать по наименованию товара.......
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.10.2010, 12:52
Помогаю со студенческими работами здесь

Посчитать вычитанные и перечитанные часы (Сумма по двум таблицам)
Как сделать чтобы у преподавателей которых нет в таблицах контрактные или бюджетные часы сумма была равна 0 ? У меня получилось...

Запрос к двум таблицам
Помогите исправить запрос: SELECT Sotrudnik.id_sotr, Sotrudnik.familia, Sotrudnik.imea,; Sotrudnik.otchestvo, Sotrudnik.s_pasporta,...

Запрос по двум таблицам
Здравствуйте, помогите пожалуйста составить запрос по двум таблицам, у них одинаковые (Id,name,number) и вычесть одинаковые name и...

Поиск по двум таблицам
Как произвести поиск по двум таблицам, которые не связанны между собой. Формулировка запроса: Вывести название определенных лекарств. У...

Поиск по двум таблицам
Здравствуйте, очень нужна ваша помощь. У меня проблема с поиском по двум таблицам. Дело в том, что сам поиск работает, но почему-то не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru