[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
------