|
|
#1 |
|
Участник
|
Суммирование строк в таблице
Доброе день.Вот программа.Подскажите как прописать условие суммирования,
т.к есть одинаковые номенклатуры, забитые в один и тотже день, а суммы разные как суммировать. X++: {
ProdJournalTable ProdJournalTable;
ProdJournalRoute ProdJournalRoute;
ProdJournalRoute ProdJournalRoute_1;
ProdJournalRoute ProdJOurnalRoute_2;
TmpProdJournalRouteOutTime tmpTable;
ProdTable ProdTable;
int nDay;
SysOperationProgress sop;
int cntItems;
date fromDate = 01\09\2008;
date toDate = 31\09\2008;
;
delete_from tmpTable;
select count (Recid)from Prodjournaltable
exists join ProdJournalRoute
where ProdJournalRoute.JournalId==ProdJournalTable.JournalId&&
ProdJournalTable.Createddate >= fromDate &&
ProdJournalTable.createdDate <= toDate &&
(ProdJournalRoute.WrkCtrId == '113' ||
ProdJournalRoute.WrkCtrId == '135');
cntItems = ProdJournalTable.RecId;
sop = SysOperationProgress::newGeneral('','',cntItems); // преоброзование шкалы
while select createddate,journalid,posted,posteddate
From ProdJournalTable
exists join ProdJournalRoute
where ProdJournalRoute.JournalId==ProdJournalTable.JournalId&&
ProdJournalTable.Createddate >= fromDate &&
ProdJournalTable.createdDate <= toDate &&
(ProdJournalRoute.WrkCtrId == '113' ||
ProdJournalRoute.WrkCtrId == '135')
{
select ProdJournalRoute_1
order by oprnum desc
where
ProdJournalRoute_1.JournalId == ProdJournalTable.JournalId;
select ProdTable
where
ProdTable.ProdId == ProdJournalRoute_1.ProdId;
select ProdJournalRoute_2
where
ProdJournalRoute_2.OprId like '045*' &&
ProdJournalRoute_2.JournalId == ProdJournalTable.JournalId;
sop.incCount();
/* info
(
strfmt("%1,%2,%3",
ProdJournalTable.createdDate,
ProdJournalTable.JournalId,
toDay() - ProdJournalTable.createdDate)
);*/
tmpTable.clear();
tmpTable.ITEMID =ProdTable.ItemId;
tmpTable.WRKCTRID=ProdjournalRoute_1.WrkCtrId;
tmpTable.Qty=ProdJournalRoute_1.QtyGood+ProdJournalRoute_1.QtyError;
if(ProdJournalTable.Posted==noyes::No)
{
tmpTable.Days= (toDay() - ProdJournalTable.createdDate)+1; //toDay() - ProdjournalRoute_1.transDate;
}
else
{
tmpTable.Days=(ProdJournalTable.PostedDate - ProdJournalTable.createdDate)+1 ;
}
tmpTable.Normal=noYes::No;
if ( tmpTable.WRKCTRID == '135')
{
nDay = 1;
}
if ( tmpTable.WRKCTRID == '113')
{
if (ProdJournalRoute_2 != NULL)
{
nDay=5;
}
else
{
nDay = 3;
}
}
if (tmpTable.Days > nDay)
tmpTable.Normal=NoYes::No;
else
tmpTable.Normal=NoYes::Yes ;
tmpTable.insert();
} |
|
|
|
|
#2 |
|
Программатор
|
select sum(Amount) from MyTable group by ItemId; Не то?
|
|
|
|
|
#3 |
|
Участник
|
|
|
|
|
|
#4 |
|
Программатор
|
не понимаю....
|
|
|
|
|
#5 |
|
Участник
|
|
|
|
|
|
#6 |
|
Программатор
|
select sum(Qty) from MyTable group by ItemId where всякие условия;
info(strfmt("%1", MyTable.qty)); Я настаиваю на этом
|
|
|
|
| За это сообщение автора поблагодарили: jeky (1). | |
|
|
#7 |
|
Участник
|
|
|
|
|
|
#8 |
|
Участник
|
Доброе утро.Подскажите, как мне присоединить while select с остальными селектами которые внизу.
X++: while select sum(Qty) from tmpTable group by ItemId { select sum(Qty)from tmpTable_1 group by ItemId where tmpTable.Normal==noyes::Yes; select sum (Qty) from tmpTable_2 group by itemid where tmpTable.Normal==noYes::No; |
|
|
|
|
#9 |
|
Программатор
|
X++: while select sum(Qty) from tmpTable group by ItemId, Normal { info(strFmt("%1, %2, %3", tmpTable.itemid, tmpTable.normal, tmpTable.qty)); } |
|
|
|
|
#10 |
|
Участник
|
|
|
|
|
|
#11 |
|
Участник
|
Вот что я прописал.Но ни чего не получилось,номенклатуры повторяются а суммы не складываются , может надо указать поле складов (WRKCTRID '113','115' ) .
X++: {
tmpProdJournalRouteOutTime tmpTable;
tmpProdJournalRouteOutTime tmpTable_1;
tmpProdJournalRouteOutTime tmpTable_2;
while select sum(Qty)
from tmpTable
group by ItemId,Normal
{
select sum(Qty)from tmpTable_1
group by ItemId
where tmpTable.Normal==noyes::Yes;
select sum (Qty) from tmpTable_2
group by itemid
where tmpTable.Normal==noYes::No;
info(strfmt("%1,2%,3%,4%",
tmpTable.ITEMID,
tmpTable.WRKCTRID,
tmpTable.Qty,
tmpTable.Normal));
}
} |
|
|
|
|
#12 |
|
Программатор
|
Зачем селекты внутри while??? Куда вы смотрите? Какой склад? Я ничо не понимаю.
Вам нужно сложить количества в разрезе ITEMID/NORMAL или как? Qty - это не СУММА это Количество.
Последний раз редактировалось Sada; 16.09.2008 в 10:40. |
|
|
|
|
#13 |
|
Участник
|
Цитата:
Есть таблица, содержащая поля Itemid,Wrkctrid(склады 113,135),Qty(сумма),Normal(поле содержит условие либо да, либо нет ). Тавк вот допустим есть повторяющиеся наменклатуры со складом 113, с разной суммой, и Normal( да ) 005.40.0443 113 1 416.000000000000 1 005.40.0443 113 1 127.000000000000 1 так же и со складом 135 МБ.01.004.2 135 1 100.000000000000 1 МБ.01.004.2 135 1 100.000000000000 1 как мне сделать чтоб получилось вот так 005.40.0443 113 1 543.000000000000 1 МБ.01.004.2 135 1 200.000000000000 1 X++: while select sum(Qty) from tmpTable group by ItemId,Normal { select sum(Qty)from tmpTable_1 group by ItemId where tmpTable.Normal==noyes::Yes; select sum (Qty) from tmpTable_2 group by itemid where tmpTable.Normal==noYes::No;
|
|
|
|
|
#14 |
|
Программатор
|
X++: while select sum(Qty) from tmpTable group by ItemId,Normal,Wrkctrid { info(strfmt("%1,2%,3%,4%", tmpTable.ITEMID, tmpTable.WRKCTRID, tmpTable.Qty, tmpTable.Normal)); } |
|
|
|
|
#15 |
|
Участник
|
Нет нет вы были правы, мне нужно сложить количества в разрезе ITEMID/WRKCTRID
вот что мне надо.Как мне дописать условие.Еще раз Извините ![]() X++: while select tmpTable group by ItemId,Wrkctrid { select sum(Qty)from tmpTable_1 group by ItemId where tmpTable.Normal==noyes::Yes; select sum (Qty) from tmpTable_2 group by itemid where tmpTable.Normal==noYes::No; |
|
|
|
|
#16 |
|
Программатор
|
забутьте про Ваши селекты в цикле. Мой пост выше сложит количества как надо.
|
|
|
|
|
#17 |
|
Участник
|
Цитата:
Вот вся программа посмотрите, что не так. X++: ProdJournalTable ProdJournalTable;
ProdJournalRoute ProdJournalRoute;
ProdJournalRoute ProdJournalRoute_1;
ProdJournalRoute ProdJOurnalRoute_2;
TmpProdJournalRouteOutTime tmpTable;
tmpprodjournalrouteouttime tmpTable_1;
tmpprodjournalrouteouttime tmpTable_2;
ProdTable ProdTable;
int nDay;
SysOperationProgress sop;
int cntItems;
date fromDate = 01\09\2008;
date toDate = 31\09\2008;
;
delete_from tmpTable;
select count (Recid)from Prodjournaltable
exists join ProdJournalRoute
where ProdJournalRoute.JournalId==ProdJournalTable.JournalId&&
ProdJournalTable.Createddate >= fromDate &&
ProdJournalTable.createdDate <= toDate &&
(ProdJournalRoute.WrkCtrId == '113' ||
ProdJournalRoute.WrkCtrId == '135');
cntItems = ProdJournalTable.RecId;
sop = SysOperationProgress::newGeneral('','',cntItems); // преоброзование шкалы
while select createddate,journalid,posted,posteddate
From ProdJournalTable
exists join ProdJournalRoute
where ProdJournalRoute.JournalId==ProdJournalTable.JournalId&&
ProdJournalTable.Createddate >= fromDate &&
ProdJournalTable.createdDate <= toDate &&
(ProdJournalRoute.WrkCtrId == '113' ||
ProdJournalRoute.WrkCtrId == '135')
{
select ProdJournalRoute_1
order by oprnum desc
where
ProdJournalRoute_1.JournalId == ProdJournalTable.JournalId;
select ProdTable
where
ProdTable.ProdId == ProdJournalRoute_1.ProdId;
select ProdJournalRoute_2
where
ProdJournalRoute_2.OprId like '045*' &&
ProdJournalRoute_2.JournalId == ProdJournalTable.JournalId;
sop.incCount();
/* info
(
strfmt("%1,%2,%3",
ProdJournalTable.createdDate,
ProdJournalTable.JournalId,
toDay() - ProdJournalTable.createdDate)
);*/
tmpTable.clear();
tmpTable.ITEMID =ProdTable.ItemId;
tmpTable.WRKCTRID=ProdjournalRoute_1.WrkCtrId;
tmpTable.Qty=ProdJournalRoute_1.QtyGood+ProdJournalRoute_1.QtyError;
if(ProdJournalTable.Posted==noyes::No)
{
tmpTable.Days= (toDay() - ProdJournalTable.createdDate)+1; //toDay() - ProdjournalRoute_1.transDate;
}
else
{
tmpTable.Days=(ProdJournalTable.PostedDate - ProdJournalTable.createdDate)+1 ;
}
tmpTable.Normal=noYes::No;
if ( tmpTable.WRKCTRID == '135')
{
nDay = 1;
}
if ( tmpTable.WRKCTRID == '113')
{
if (ProdJournalRoute_2 != NULL)
{
nDay=5;
}
else
{
nDay = 3;
}
}
if (tmpTable.Days > nDay)
tmpTable.Normal=NoYes::No;
else
tmpTable.Normal=NoYes::Yes ;
tmpTable.insert();
}X++: while select sum(Qty) from tmpTable group by ItemId,Normal { select sum(Qty)from tmpTable_1 group by ItemId where tmpTable.Normal==noyes::Yes; select sum (Qty) from tmpTable_2 group by itemid where tmpTable.Normal==noYes::No; |
|
|
|
|
#18 |
|
Программатор
|
я пас....
|
|
|
|
|
#19 |
|
Ищущий знания...
|
может:
X++: while select tmpTable group by ItemId { select sum(Qty)from tmpTable_1 where tmpTable_1.Normal==noyes::Yes && tmpTable_1.ItemId == tmpTable.ItemId; select sum (Qty) from tmpTable_2 where tmpTable_2.Normal==noYes::No && tmpTable_2.ItemId == tmpTable.ItemId;
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#20 |
|
Участник
|
Нет, все равно не складывается количество,вот так получается
10.4.2003 135 1 1000.000000000000 1 10.4.2003 135 1 1000.000000000000 1 Я что думаю может есть проблема с Wrkctrid и Itemid. Может их как совместить, или что нибудь типа этого. Не знаю голова кругом
|
|
|