| 
			
			 | 
		#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. Может их как совместить, или что нибудь типа этого. Не знаю голова кругом  
		 | 
| 
	
 |