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

Sql-запрос фильтрация

13.05.2019, 00:52. Показов 1611. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!Нужна небольшая помощь с запросом. В dbgride считается итоговая стоимость по каждому ремонту(по коду).Когда много записей,получается всё считается в одну кучу за все ремонты.Подскажите как сделать фильтрацию,выбрал один ремонт в другой таблице,показывает итоговую сумму только для данного ремонта.Спасибо.
SQL
1
2
3
4
5
6
7
SELECT d.[Код_ремонта], m.[Название], m.[Цена], d.[Количество], (m.Цена * d.Количество) AS [Итоговая_сумма]
FROM Материалы m INNER JOIN Затраченные_материалы d ON m.[Код_материала] = d.[Код_материала] 
WHERE d.[Код_ремонта] IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,44)
UNION ALL
SELECT 'Итого:' AS [Код_ремонта], '' AS [Название], 0 AS [Цена], 0 AS [Количество], SUM(m.Цена * d.Количество) AS [Итоговая_сумма]
FROM Материалы m INNER JOIN Затраченные_материалы d ON m.[Код_материала] = d.[Код_материала] 
WHERE d.[Код_ремонта] IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,44)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.05.2019, 00:52
Ответы с готовыми решениями:

Фильтрация по дате в IBDataSet через SQL запрос
Доброго времени суток! Возникла проблема с фильтрацией по дате. Делаю в IBDataSet, база данных InterBase. Делаю так: в datetimepicker...

Фильтрация данных в DBGrid через SQL запрос DataSet-a
Delphi 2009, fibplus, firebird. Имеется DataSet c SQL-запросом: SELECT distinct raion.naz_rai, kvartira.KOMNAT_KV, ylica.naz_yl,...

фильтрация SQL
procedure TForm12.CheckBox1Click(Sender: TObject); begin if CheckBox1.Checked=true then begin end; DataModule3.ADOQBilet.Close; ...

14
5953 / 4529 / 1094
Регистрация: 29.08.2013
Сообщений: 28,121
Записей в блоге: 3
13.05.2019, 09:08
ограничить по Коду ремонта?
0
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 298
13.05.2019, 20:17  [ТС]
Да,ограничить по коду ремонта,при выделении ремонта с кодом 1,отображение суммы только для данного ремонта
0
5953 / 4529 / 1094
Регистрация: 29.08.2013
Сообщений: 28,121
Записей в блоге: 3
14.05.2019, 10:05
ну так ограничивайте
Запрос это строка кто вам мешает дописывать к строке что то?

Delphi
1
2
3
4
var sql:string;
 
sql:='select a from B where c=';
query.sql.text:=sql+Edit1.Text;
где в Эдите у вас нужный склад
0
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 298
16.05.2019, 00:17  [ТС]
Спасибо вам,но у меня трудность в другом,у меня же нет склада,на форме dgrid с ремонтом,у каждого кода свой ремонт,и есть dgrid с затраченными материалами для каждого(отдельного ремонта).Оно считает мне итоговую сумму за все ремонты,но мне нужно к примеру я выбрал запись одну и происходил расчёт итоговой суммы.
0
5953 / 4529 / 1094
Регистрация: 29.08.2013
Сообщений: 28,121
Записей в блоге: 3
16.05.2019, 08:39
извините, но я не понимаю вашей проблемы

у вас есть SQL, у вас есть Делфи
с этим набором вы можете все
0
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 298
16.05.2019, 12:06  [ТС]
Вот так мне считает итоговую сумму по коду ремонта.
SQL
1
2
3
SELECT SUM(m.Цена * d.Количество) AS [Итоговая_сумма]
FROM Материалы m INNER JOIN Затраченные_материалы d ON m.[Код_материала] = d.[Код_материала] 
WHERE d.[Код_ремонта] =2
Возможно ли сделать так,чтобы значение
SQL
1
WHERE d.[Код_ремонта] =2
менялось в зависимости от выбранной записи в dbgrid?
0
5953 / 4529 / 1094
Регистрация: 29.08.2013
Сообщений: 28,121
Записей в блоге: 3
16.05.2019, 12:26
конечно
доставайте код ремонта и присваивайте в запрос - я показывал как
0
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 298
16.05.2019, 12:50  [ТС]
Подскажите пожалуйста,это будет выглядеть таким образом?Я просто не работал с переменными в запросах.Спасибо
SQL
1
2
3
4
5
6
var SQL:string;
 
SQL:='select Код_ремонта from Ремонт ';
SELECT SUM(m.Цена * d.Количество) AS [Итоговая_сумма]
FROM Материалы m INNER JOIN Затраченные_материалы d ON m.[Код_материала] = d.[Код_материала] 
WHERE d.[Код_ремонта] =SQL
0
5953 / 4529 / 1094
Регистрация: 29.08.2013
Сообщений: 28,121
Записей в блоге: 3
16.05.2019, 13:08
Цитата Сообщение от maksimelyan Посмотреть сообщение
не работал с переменными в запросах
запрос это СТРОКА. делай с ней что хочешь.

Delphi
1
2
3
4
5
6
7
8
9
10
var
i:integer;
begin
i:=DBGrid1.SelectedIndex; //определяем номер выделенной колонки
 
query.sql.text:=
'SELECT SUM(m.Цена * d.Количество) AS [Итоговая_сумма] '+
'FROM Материалы m INNER JOIN Затраченные_материалы d ON m.[Код_материала] = d.[Код_материала] '+
'WHERE d.[Код_ремонта] ='+DBGrid1.DataSource.DataSet.Fields.Fields[i].Value; 
query.active:=true;
c DBGrid не очень - давно не работал
0
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 298
16.05.2019, 13:36  [ТС]
Спасибо вам большое,но при расчёте,выдает сообщение could not convert variant type (unicodestring) into type (double)
В чем может быть проблема?
Или я делаю что-то не так,на кнопку сделал событие
SQL
1
2
3
4
5
6
7
8
9
10
11
12
PROCEDURE TremontForm.BitBtn14Click(Sender: TObject);
 
var
i:INTEGER;
BEGIN
i:=DBGrid1.SelectedIndex; //определяем номер выделенной колонки
 
Datamodule3.ADOQuery2.sql.text:=
'SELECT SUM(m.Цена * d.Количество) AS [Итоговая_сумма] '+
'FROM Материалы m INNER JOIN Затраченные_материалы d ON m.[Код_материала] = d.[Код_материала] '+
'WHERE d.[Код_ремонта] ='+DBGrid1.DataSource.DataSet.Fields.Fields[i].Value;
Datamodule3.ADOQuery2.active:=TRUE;
,связал dbgrid с datasource,естественно связав adoquery
0
5953 / 4529 / 1094
Регистрация: 29.08.2013
Сообщений: 28,121
Записей в блоге: 3
16.05.2019, 13:41
Цитата Сообщение от maksimelyan Посмотреть сообщение
В чем может быть проблема?
рекомендую проверить что у вас находится в DBGrid1.DataSource.DataSet.Fields.Fields[i].Value
1
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 298
16.05.2019, 13:48  [ТС]
что именно проверить?
0
554 / 484 / 191
Регистрация: 11.12.2013
Сообщений: 2,505
16.05.2019, 13:51
может надо так?
Delphi
1
'WHERE d.[Код_ремонта] ='+VarToStr(DBGrid1.DataSource.DataSet.Fields.Fields[i].Value)
1
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 298
16.05.2019, 13:53  [ТС]
Алексей и Qwertenok спасибо вам большое,я вам очень благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.05.2019, 13:53
Помогаю со студенческими работами здесь

Фильтрация в Delphi SQL
В программе нужно сделать Фильтрацию "цена больше 1000" Прописала этот код, программа запускается но при нажатие на кнопку все данные из...

Запрос - фильтрация mssql
Здравствуйте, не могу разобраться, как правильно прописать фильтрацию по нескольким значениям переменной ? ADOQuery1.SQL.Text :='SELECT...

Фильтрация без SQL Paradox
Ребят плз помогите уже всё облазил и голову себе ломаю не могу задать фильтр в TTable по полю DAte заданые промежутком Datetimepicker1 и...

Delphi+SQL+Access фильтрация данных
Добрый день. Помогите пожалуйста. Есть таблица: Дата Контрагент Начислено НДФЛ Касса Продукция Необходимо вначале выбрать все строки...

Фильтрация на CDS с суммированием, как в SQL запросах
как в компоненте ClientDataSet сделать фильтрацию, кторая может повторить примерно такой запрос select sum(suma) from table where...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru