Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];

Вниз

SQL - запрос проблемы...   Найти похожие ветки 

 
SkyR   (2002-04-09 08:32) [0]

//ComboPrepar - ЭТО ComboBox в котором лежит название всех препаратов
//Нужно для КАЖДОГО препарата подсчитать сумму по полям
//
//Demand
//REMAINSTY
//EXPENSE
//FINDEMAND
//

***
for j:=0 to ComboPrepar.Items.Count-1 do
Begin

DM.DM1.SQLQuery.Close;
DM.DM1.SQLQuery.SQL.Strings[0]:="select * from Main where "+"NAME="+chr(39)+ComboPrepar.Items.Strings[j]+chr(39);
DM.DM1.SQLQuery.Open;

DM.DM1.TableSvodRep.Open;
DM.DM1.TableSvodRep.Append;

DM.DM1.TableSvodRep.FieldByName("Name").AsString:=ComboPrepar.Items.Strings[j];

for i:=0 to DM.DM1.SQLQuery.RecordCount do
Begin
DM.DM1.TableSvodRep.FieldByName("Demand").AsFloat:=DM.DM1.TableSvodRep.FieldByName("Demand").AsFloat+DM.DM1.SQLQuery.FieldByName("Demand").AsFloat;
DM.DM1.TableSvodRep.FieldByName("REMAINSTY").AsFloat:=DM.DM1.TableSvodRep.FieldByName("REMAINSTY").AsFloat+DM.DM1.SQLQuery.FieldByName("REMAINSTY").AsFloat;
DM.DM1.TableSvodRep.FieldByName("EXPENSE").AsFloat:=DM.DM1.TableSvodRep.FieldByName("EXPENSE").AsFloat+DM.DM1.SQLQuery.FieldByName("EXPENSE").AsFloat;
DM.DM1.TableSvodRep.FieldByName("FINDEMAND").AsFloat:=DM.DM1.TableSvodRep.FieldByName("FINDEMAND").AsFloat+DM.DM1.SQLQuery.FieldByName("FINDEMAND").AsFloat;
DM.DM1.SQLQuery.Next;
End;

DM.DM1.TableSvodRep.Post;
End;
***

В принципе работает, но на P100 где она будет работать все это дело занимает около 3 мин!
Помогите плиз перевести часть между *** *** на SQL


 
fnatali   (2002-04-09 08:40) [1]

А названия всех препаратов у тебя хранятся в какой-то таблице? (по логике задачи надо-бы хранить)
Например,
таблица PREPAR
id
name
таблица MAIN
id_prepar
Demand
REMAINSTY
EXPENSE
FINDEMAND
Тогда можно уложиться в один запрос
DM.DM1.SQLQuery.Close;
DM.DM1.SQLQuery.SQL.Strings[0]:="select p.name,sum(m.demand),sum(m.remainsty), sum(m.expense), sum(m.findemand) from Main m, PREPAR p where p.id=m.id_prepar group by p.name");
DM.DM1.SQLQuery.Open;




 
roottim   (2002-04-09 08:42) [2]

супер!... как это читабельно :))

select f1,f2,...,sum(fn) from mytable1,... where...
grup by f1,f2,...,fn


 
Johnmen   (2002-04-09 09:03) [3]

Дополнение, вот так вот короче и читабельней :
with DM.DM1.SQLQuery do begin;
Close; SQL.Clear;
SQL.Append(...);
Open;
end;

PS Не совсем понятно, что такое DM и DM1 в связке ?







Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.004 c
7-94604
SV
2002-01-31 13:18
2002.04.29
Shell


3-94328
Ujin_m
2002-04-09 11:51
2002.04.29
Как определить что DB session alive


1-94486
Up
2002-04-16 15:15
2002.04.29
Custom Menu


4-94612
Grim Rider
2002-02-22 06:24
2002.04.29
PostMessage или приказано


1-94394
SPeller
2002-04-16 11:59
2002.04.29
Асинхронные процедуры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский