[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re2: Odp: Grupowanie



IF LAST-OF "drugi substring" zadziala poprawnie o ile zlicza Pani np na zmiennej
pomocniczej sume w kazdej podgrupie. Jesli uzywa Pani DISPLAY ...SUB-TOTAL ... i
DISPLAY jest tylko po IF LAST-OF to nie zadziala.

Ponizej dwa gotowe i sprawdzone rozwiazania przygotowane przez Lidke Boruc (z
dzialu technicznego Progressa).
Pierwsze jest ciekawsze BREAK BY jest po wyrazeniu, ktore Pania w rzeczywistosci
interesuje.

----------------------------------------------------------------------------
FOR EACH obroty
  BREAK BY substring(STRING(konto),1,3) +
                      substring(STRING(konto),LENGTH(STRING(konto)) - 2,3):

        disp  string(konto) format "X(15)"
                kwota (SUB-TOTAL by substring(STRING(konto),1,3) +
                   substring(STRING(konto),LENGTH(STRING(konto)) - 2,3)).
 end.

---------------------------------------------------------------------------
FOR EACH obroty BREAK BY substring(STRING(konto),1,3)
         BY substring(STRING(konto),LENGTH(STRING(konto)) - 2,3):

       disp string(konto) format "x(15)"
           kwota (SUB-TOTAL by substring(STRING(konto),LENGTH(STRING(konto)) -
2,3)).

end.
------------------------------------------------------------------------------------------------------

Beata Lebryk wrote:

> Chyba sie troche nie zrozumielismy. Opisze to moze jasniej. Mam tablice z
> kontami: 010 020 030 031 041. Dla tych kont mam jakies wartosci. Chodzi mi o
> uzyskanie kwot bedacych sumami dla odpowiednich kont (sumowanie po pierwszym
> i ostanim znaku). Czyli chce uzyskac takie liczby:
> kwote "Razem" dla grupy 0*0, "Razem" 0*1 "Razem" 1*1 itd. Nie interesuja
> mnie podsumowania dla kont z grupy 0**, 1** ani tez dla grup **0, **1.
>
>  Ja robie to tak:
>
> for each konto break by substring(konto,1,1) by substring(konto,3,1):
>    if last-of(...)
>       ...
>    end
> end.
>
> I tu pojawia sie problem, bo jezeli dam if last-of("pierwszy_substring") to
> mam wyniki dla grup 0**,1**,2** itd, a jezeli uzywam
> last-of("drugi_substring") to mam **0,**1,**2.
> Jak zrobic zeby dawal mi wyniki po podwójnym grupowaniu ?
>
> ----- Wiadomooć oryginalna -----
> Od: Marek Prokop <mprokop@progress.com>
> Do: <progress@zeto.bydgoszcz.pl>
> Wysłano: 28 sierpnia 2000 09:55
> Temat: Re: Grupowanie
>
> Dzien dobry,
>
> Przy zalaozeniu, ze np. 301-1-10-111 to jedno pole o nazwie klucz,
> mozna sprobowac:
>
> for each rekord
>    break by substring(klucz,1,3)
>    break by substring (klucz, (length(klucz) - 2,3) :
> .......
>
> Bedzie to dosyc wolne oczywiscie, bo pewnie nie ma indeksu, ktory to
> wspomaga.
> Zeby przyspieszyc, nalezaloby
> zrobic dwa pola (poczatek i koniec klucza) oraz dwa indeksy - kazdy wg
> jednego
> z tych pol; i przerobic powyzszy FOR EACH na grupowanie wg tych pol, a nie
> wg
> wyrazen z SUBSTRING.
> Pozdrawiam,
> Marek Prokop
>
> PS. Przy okazji fragment dokumentacji Progressa:
>
> SUBSTRING (source , position [ , length [ , type ] ] )
>
> source
>
> A character expression from where you want to extract characters or bytes.
>
> position
>
> An integer expression that indicates the position of the first character you
> want to extract from source.
>
> length
>
> An integer expression that indicates the number of characters you want to
> extract from source. If you do not use the length argument or specify -1 as
> the
> length, SUBSTRING uses the remainder of the string from the specified
> position.
>
> type
>
> A character expression that directs Progress to interpret the specified
> position and length values as character units, bytes, or columns. A
> double*byte
> character registers as one character unit. By default, Progress interprets
> the
> specified position and length values as character units.
>
> There are FOUR valid types: "CHARACTER," "FIXED," "COLUMN," and "RAW." The
> expression "CHARACTER" specifies character units. The expression "FIXED"
> specifies that position is in character units and the length is in bytes,
> but
> directs SUBSTRING to yield only whole characters. That is, if the last byte
> or
> bytes represent part of, but not all of, a multi*byte character, these bytes
> are excluded. The expression "COLUMN" specifies display or print
> character*columns. The expression "RAW" specifies bytes. If you specify the
> type as a constant expression, Progress validates the type specification at
> compile time. If you specify the type as a non*constant expression, Progress
> validates the type specification at run time.
>
> Beata Lebryk wrote:
>
> > Witam. Mam pewien problem. Posiadam w bazie np. takie rekordy:
> >
> > 301-1-10-111    10 zł
> > 301-1-12-111    20 zł
> > 302-1-10-111    30 zł
> > 302-1-12-112    40 zł
> > 303-1-12-115    50 zł
> > 303-1-15-115    60 zł
> >
> > Muszę pogrupować dane, ale w ten sposób aby uzyskać wyniki:
> > 301-*-**-111    30 zł
> > 302-*-**-111    30 zł
> > 302-*-**-112    40 zł
> > 303-*-**-115    110 zł
> >
> > Chodzi mi więc o uzyskanie kwot po grupowaniu wg 3 pierwszych cyfr i
> trzech
> > ostatnich. Może to banalne pytanie, ale jak to uzyskać ?
> >
> > Z góry dziękuję za pomoc.
> >
> > Pozdrawiam
> > Beata Lebryk
> >
> > ------
> > Strona WWW:     http://pluton.pol.lublin.pl/pugpl/index.htm
> > Obsluga listy:  listserv@zeto.bydgoszcz.pl
> > Archiwum listy: http://www.zeto.bydgoszcz.pl/progress/index.html
> > ------
>
> ------
> Strona WWW:     http://pluton.pol.lublin.pl/pugpl/index.htm
> Obsluga listy:  listserv@zeto.bydgoszcz.pl
> Archiwum listy: http://www.zeto.bydgoszcz.pl/progress/index.html
> ------
>
> ------
> Strona WWW:     http://pluton.pol.lublin.pl/pugpl/index.htm
> Obsluga listy:  listserv@zeto.bydgoszcz.pl
> Archiwum listy: http://www.zeto.bydgoszcz.pl/progress/index.html
> ------

------
Strona WWW:     http://pluton.pol.lublin.pl/pugpl/index.htm
Obsluga listy:  listserv@zeto.bydgoszcz.pl
Archiwum listy: http://www.zeto.bydgoszcz.pl/progress/index.html
------