Текущий архив: 2006.07.16;
Скачать: CL | DM;
ВнизГруппировка. Найти сумму вычисляемых полей. Найти похожие ветки
← →
Vic111 (2006-05-16 10:57) [0]Уважаемые Мастера, юпомогите советом.
Есть запрос из нескольких таблиц, на основании данных выборки рассчитываются данные вычисляемых полей. Как мне можно получить сумму значений, полученных в выч. поле, как если бы была сделана группировка по одному из полей запроса (CIKL_P).
Текст запроса:
SELECT Izdelia.masa_zag, Izdelia.cena_zag, Izdelia.masa_ot, Izdelia.cena_mat, [2Sotrudniki].FIO, [1Profesii].Oplata, Tehnologii.t, Oborudovanie.Amortizacia, Oborudovanie.rashod_exp, Izdelia.proch_rash
FROM Tehnologii INNER JOIN (Oborudovanie INNER JOIN (Izdelia INNER JOIN ((1Profesii INNER JOIN 2Sotrudniki ON [1Profesii].N = [2Sotrudniki].Doljnost) INNER JOIN CIKL_Proizv ON [2Sotrudniki].N = CIKL_Proizv.Rabotn) ON Izdelia.N = CIKL_Proizv.CIKL_P) ON Oborudovanie.N = CIKL_Proizv.Oborud) ON Tehnologii.N = CIKL_Proizv.Tehnolog
Заранее спасибо.
← →
Sergey13 © (2006-05-16 11:03) [1]2Vic111 (16.05.06 10:57)
1.Циклом пробегись по набору и просуммируй вычисляемые поля.
2.Переделай запрос и введи вычисления в него.
← →
Vic111 (2006-05-16 11:36) [2]Высмыкнул такой кусочек кода
function TSebest_Form.SumField(const fieldName: String): real;
var
fld: TField;
bm: TBookmark;
begin
result := 0;
ADODataSet_Sebest.DisableControls;
bm := ADODataSet_Sebest.GetBookmark;
fld := ADODataSet_Sebest.FieldByName(fieldName);
ADODataSet_Sebest.first;
while not ADODataSet_Sebest.eof do
begin
result := result + fld.AsFloat;
ADODataSet_Sebest.next;
end;
ADODataSet_Sebest.GotoBookmark(bm);
ADODataSet_Sebest.EnableControls;
label1.Caption:=FloatToStr(result);
end;
но если ставлю его в AfterScroll (чтобы отслеживать данные конкретной детали) то вылетает переполнение стека. Куда его можно запихнуть?
← →
Sergey13 © (2006-05-16 11:45) [3]>Куда его можно запихнуть?
Гусары, молчать!!!! 8-)
2 [2] Vic111 (16.05.06 11:36)
>но если ставлю его в AfterScroll
В AfterScroll чего?
← →
ANB © (2006-05-16 12:21) [4]
> Vic111 (16.05.06 10:57)
Аксесс подзапросы в селектовой части кушает ?
← →
MsGuns © (2006-05-16 12:33) [5]Чей-то не узрел в сабже вычисляемых полей.
А проблемка решается так:
Основной запрос, возвращающий вычисляемые поля:
SELECT P.skladid, P.prodid, P.prodname, P.cost, P.quont, P.cost*P.quont AS summ
FROM Production P
Для получения общей суммы надо выполнить другой запрос, получамый из первого:
SELECT A.skladid, SUM(A.summ) FROM
(SELECT P.prodid, P.prodname, P.cost, P.quont, P.cost*P.quont AS summ
FROM Production P) A
GROUP BY A.skladid
Первый НД отображается в сетке (типа просмотр картотек складов), из второго данные забираются в отображаемые контролы-итоги.
Для достоверности результатов оба запроса надо выполнять в контексте одной транзакции.
← →
Vic111 (2006-05-16 12:53) [6]В AfterScroll DataSet-а, в нем же создаю вычисляемые поля.
Спасибо, ВСЕМ за подсказки, сейчас проверю.
← →
Sergey13 © (2006-05-16 12:55) [7]2[6] Vic111 (16.05.06 12:53)
А подумать? На переход на следующую строку вешать переход по всем строкам.
← →
Vic111 (2006-05-16 16:43) [8]Торможу!
Бывает!
Частенько!
;-)
Запрос перестроить не получается :-(, там данные из 6 табл.
А насколько неправильно будет создать 2-й DS и сделать:
ADODataSet1.Recordset:=ADODataSet_Sebest.Recordset;
и затем в зависимости от положения в 1-м - бегать по 2-му и искать сумму?
Страницы: 1 вся ветка
Текущий архив: 2006.07.16;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.008 c