Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109

Сумирование с условиями

07.05.2010, 08:41. Показов 683. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, у меня такой вопрос, как примерно должен выглядеть SQL запрос на суммирование, при таких условиях - в процессе суммирования проверяется наличие на складе какого либо изделия, если его нет, беруться его аналоги вычисляется наиболее дешовый, с проверкой на наличае его на складе...

и т.д. ... как то так... какие будут предложения?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.05.2010, 08:41
Ответы с готовыми решениями:

Вывод и сумирование данных
есть вот такой код, мне надо чтобы он выводил данные и сумировал один столбец, а он у меня ругается на второй select что делать ??? ...

Поиск с несклькими условиями
Доброго времени суток. Простите если такая тема уже была, но я, к сожалению, не нашел. Подскажите пожалуйста такую вещь: работаю с дельфи и...

SQL запрос с условиями
Доброго времени суток. У меня такой вопрос: нужно составить запрос SQL так что бы присутствовали операторы IF. Если быть точнее,...

8
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
07.05.2010, 09:00
Цитата Сообщение от DenProx Посмотреть сообщение
как примерно должен выглядеть SQL запрос
Как выглядит SQL запрос, зависит не только от условия "есть или нет товара на кладе", но и от того, как организована информация и товаре от того какую СУДБ используешь и, даже, от версии СУБД. Без этой информации осмысленно ответить тебе невозможно
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
07.05.2010, 09:17  [ТС]
SAMZ, пардон ) не учел...

использую БД Access , подключаю через ADOQuery.

есть значит (условно) две таблицы tblDetail

Key| Name | Sklad | Count | Cena | ...

и tblDetailAnalog

Key | Detail_ID | Name | Sklad | Cena | Count | ...

примерно так, значит начинаем суммирование по таблице tblDetail по полю Cena, при этом проверяем наличае по полю Sklad, если Sklad = 0 тогда ищем для данной детали из таблицы tblDetailAnalog, наиболее дешовую, имеющуюся на складе... как нашли прибпвили к сумме, и дальше пошли суммировать по tblDetail...

надеюсь этого достаточно... если нет, скажите что еще нужно.
0
116 / 58 / 6
Регистрация: 16.12.2009
Сообщений: 204
07.05.2010, 09:34
По моему, лучше сделать не одним запросом. Если выборка оказалась пустой, то выбирать альтернативные варианты. Связь между товарами можно описать через "тэги" или через "группы товаров".

Добавлено через 8 минут
Эм...2 таблицы и в обоих хранится информаци о товаре, и отличие в том что одни товары альтернативны другим?
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
07.05.2010, 10:34  [ТС]
_victor,
Цитата Сообщение от _victor Посмотреть сообщение
Эм...2 таблицы и в обоих хранится информаци о товаре, и отличие в том что одни товары альтернативны другим?
ну да... в голову пришла только такая мысль...

Добавлено через 1 минуту
точнее таблицы вообще 3 ))

первая - Справочник, со списком всех существующих,
вторая группировка по изделиям к котрым относятся те или иные детали
третья - аналоги для детали

Добавлено через 28 минут
решил вот пока в ручную сделать:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
procedure TfmDBDetail.Button1Click(Sender: TObject);
var min,i : integer;
begin
 Summ := 0;
 while not DM.QDetail.Eof do
   begin
     if DM.QDetail['Sklad'] <> 0 then
       begin
         Summ := Summ + DM.QDetail['Price'];
         DM.QDetail.Next;
       end else
       begin
       if DM.QAnalogDet['Price'] <> Null then
         min := DM.QAnalogDet['Price'];
         DM.QAnalogDet.First;
         for i:=1 to DM.QAnalogDet.RecordCount do
           Begin
             if min > DM.QAnalogDet['Price'] then
             min := DM.QAnalogDet['Price'];
             DM.QAnalogDet.Next;
           end;
         if DM.QAnalogDet['Sklad'] <> 0 then
         ShowMessage(IntToStr(min));
         Summ := Summ + Min;
         DM.QDetail.Next;
       end;
   end;
 DM.QDetail.First;
 Label1.Caption := IntToStr(Summ);
end;
но есть проблемка, ни как не получается найти минимум из деталей которые есть на складе... ищет всегда из всех деталей... как можно сделать условие двойное, что если есть на складе, и минимальное то добавить к сумме... ?
0
151 / 151 / 3
Регистрация: 05.05.2010
Сообщений: 570
07.05.2010, 10:38
Делал бы уже двумя запросами:
Первый для поиска оригинала (даже если его нет на складе)
Второй - отображает аналоги.

А базу все-таки надо нормализовать - меньше проблем будет.
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
07.05.2010, 10:56  [ТС]
harmless, обязательно нормализую... но потом)) времени совсем нет... хотябы так нужно сделать пока... для начала...)
0
151 / 151 / 3
Регистрация: 05.05.2010
Сообщений: 570
07.05.2010, 11:09
Дак "потом" и запросы надо переделывать. И 100% переделывать придется на более простые запросы.
Смысл сначала обертку заворачивать, а потом пытаться туда конфету запихнуть - всё равно разворачивать придется....
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
07.05.2010, 13:44  [ТС]
harmless, ну это же мои проблемы)) тем более я пока не запросами делаю, а вручную...
единственное что осталось, это то чтобы при поиске минимума в аналогах учитывалось наличае на складе...

попробывал еще так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
var min,i : integer;
begin
 Summ := 0;
 while not DM.QDetail.Eof do
   begin
     if DM.QDetail['Sklad'] <> 0 then
       begin
         Summ := Summ + DM.QDetail['Price'];
         DM.QDetail.Next;
       end else
       begin
       if DM.QAnalogDet['Price'] <> Null then
         min := DM.QAnalogDet['Price'];
         DM.QAnalogDet.First;
         for i:=1 to DM.QAnalogDet.RecordCount do
           Begin
             if (min > DM.QAnalogDet['Price']) and
                (DM.QAnalogDet['Sklad'] <> 0) then
               begin
                 min := DM.QAnalogDet['Price'];
                 DM.QAnalogDet.Next;
               end;
           end;
         ShowMessage(IntToStr(min));
         Summ := Summ + Min;
         DM.QDetail.Next;
       end;
   end;
 DM.QDetail.First;
 Label1.Caption := IntToStr(Summ);
но результат тот же.... (

Добавлено через 2 часа 27 минут
Вот наконец то добил! )) Вродибы работает... правда медленно... но все же)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
var min,i : integer;
begin
 
DM.QDetail.First;
 
 Summ := 0;
 while not DM.QDetail.Eof do
   begin
     if DM.QDetail['Sklad'] <> 0 then
       begin
         Summ := Summ + DM.QDetail['Price'];
         DM.QDetail.Next;
       end else
       begin
           DM.QAnalogDet.DataSource := nil;
 
           DM.QAnalogDet.Active := False;
           DM.QAnalogDet.SQL.Clear;
           DM.QAnalogDet.SQL.Add('SELECT *');
           DM.QAnalogDet.SQL.Add('FROM tblAnalogDet');
           DM.QAnalogDet.SQL.Add('WHERE Detail_ID = '+ IntToStr(DM.QDetail['Key'])+' AND ');
           DM.QAnalogDet.SQL.Add(' Sklad_ID IN (SELECT Key FROM tblDetailSpr WHERE Sklad > 0)');
           DM.QAnalogDet.Active := True;
 
       if DM.QAnalogDet['Price'] <> Null then
         min := DM.QAnalogDet['Price'];
         DM.QAnalogDet.First;
         for i:=1 to DM.QAnalogDet.RecordCount do
           Begin
             if (min > DM.QAnalogDet['Price']) then
                 min := DM.QAnalogDet['Price'];
                 DM.QAnalogDet.Next;
           end;
           ShowMessage(IntToStr(min));
         Summ := Summ + Min;
         DM.QDetail.Next;
       end;
   end;
 DM.QDetail.First;
 Label1.Caption := IntToStr(Summ);
 
DM.QAnalogDet.DataSource := DM.DSDetail_Q;
 
DM.QAnalogDet.Active := False;
DM.QAnalogDet.SQL.Clear;
DM.QAnalogDet.SQL.Add('SELECT *');
DM.QAnalogDet.SQL.Add('FROM tblAnalogDet');
DM.QAnalogDet.SQL.Add('WHERE (Detail_ID=:Key)');
DM.QAnalogDet.Active := True;
 
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.05.2010, 13:44
Помогаю со студенческими работами здесь

Копировать dbgrid с определенными условиями
Добрый день.Подскажите как скопировать все записи с таблицы кроме тех кто со статусом &quot;Отсутствует&quot;? пробовал так он на записи...

Вывод 3 столбцов с условиями после выполнения SQL запроса
Помогите пожалуйста сделать запрос. with qqry do begin SQL.Clear; SQL.Add('SELECT SUM(PRICE) FROM OOC WHERE...

Написать код для фильтрации базы данных с двумя условиями
Помогите немогу написать код для фильтрации базы данных с 2 условиями. Есть колонка Old (возраст) и есть 2 edit(а), первый задаёт...

Сумирование колонок DataGridView
Как в DataGridView суммировать колонку и выводить сумму в TextBox. DGV заполняется из БД

Сумирование умножение матриц
Привет! Помогите пожалуйста.... у меня сейчас практика, и нужно сделать 20 задач... если не зделаюю автоматом вылетаю с универа( вот...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
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-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru