[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Odp: Odp: Grupowanie
Korzystajac z Pana wskazówek otrzymuje takie wyniki:
010 309.562.020,02
-------------------
309.562.020,02 TOTAL
011 0,00
-------------------
0,00 TOTAL
020 552.075,87
-------------------
552.075,87 TOTAL
030 0,00
-------------------
0,00 TOTAL
070 3.993.333,36
-------------------
3.993.333,36 TOTAL
071 0,00
-------------------
0,00 TOTAL
078 581.875,88
-------------------
581.875,88 TOTAL
081 10.319.286,15
-------------------
10.319.286,15 TOTAL
083 141.129.685,55
-------------------
141.129.685,55 TOTAL
084 180.599.136,89
-------------------
180.599.136,89 TOTAL
090 0,00
-------------------
0,00 TOTAL
091 0,00
-------------------
0,00 TOTAL
092 0,00
-------------------
0,00 TOTAL
093 0,00
-------------------
0,00 TOTAL
094 0,00
-------------------
0,00 TOTAL
100 5.758.350,51
-------------------
5.758.350,51 TOTAL
czyli stany poszczególnych kont.
A ja chce miec takie wyniki
Konto 0*0 314107429,25
Konto 1*0 5758350,51
Konto 0*1 10319286,15
itd.
Skorzystalam z rady p. Perlinskiego i robie to przy pomocy temp-table, ale
czy mozna to zrobic inaczej ?
Pozdrawiam
Beata Lebryk
----- Wiadomooć oryginalna -----
Od: Marek Prokop <mprokop@progress.com>
Do: <progress@zeto.bydgoszcz.pl>
Wysłano: 28 sierpnia 2000 12:04
Temat: 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
------
------
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
------