Tablica dynamiczna - sorotwanie i zliczanie danych

0

Witam, mam problem i nie wiem jak sobie z nim poradzić. Mianowicie mam dane w tablicy i próbuje je posorotwać i zliczyć sumę, lecz nie wiem jak się za to zabrać.

Deklaracja tablicy:
IloscRekordow: array of string;

Zapis danych do tablicy:
while not FormMain.ADODataSet.Eof do
begin
IloscRekordow[FormMain.ADODataSet.RecNo-1]:=
'+FormMain.ADODataSet.FieldByName('NR_UŻYTKOWNIKA').AsString+~
+FormMain.ADODataSet.FieldByName('SUMA').AsString+;
end;

Przykładowe dane:
Name Value
[0] 1434'~'1,5'
[1] 653'~'10'
[2] 1640'~'1,5'
[3] 1290'~'1'
[4] 1927'~'1'
[5] 1927'~'1'
[6] 1640'~'1,5'
Pierwszy wpis to nazwa użytkownika, natomiast drugi to liczba.

Potrzebuję wyrzucić użytkowników i sumę posortowane rosnąco.
Np:
653 = 10
1290 = 1
1434 = 1,5
1640 = 1,5
1927 = 2

Proszę mistrzów świata w Delphi o pomoc (naprowadzenie).

Z góry dziękuje ludzią dobrej woli.

0

od tego jest SQL a nie jakieś dziwne konstrukcje

0
Misiekd napisał(a)

od tego jest SQL a nie jakieś dziwne konstrukcje

jak by się dało zrobić sqlem to nie prosiłbym o pomoc !

W procedurze są 4 podzapytania w różnych tabel i różnych instancji i to ostatnie zbiera dane do tablicy i muszę to posorotwać. Inaczej pożądanego wyniku nie osiągne.

Z góry dziękuje

0

no i co, że są 4 podzapytania? Dasz SQL to zobaczysz, że się da.

BTW zapis do tablicy w taki sposób jak pokazałeś jest tak idiotyczny, że już bardziej być nie mógł... Nie słyszałeś o rekordach? Kto wymyślił aby dwie wartości liczbowe zbijać do jednego stringa i później coś tam sortować i sumować???

0
Misiekd napisał(a)

no i co, że są 4 podzapytania? Dasz SQL to zobaczysz, że się da.

BTW zapis do tablicy w taki sposób jak pokazałeś jest tak idiotyczny, że już bardziej być nie mógł... Nie słyszałeś o rekordach? Kto wymyślił aby dwie wartości liczbowe zbijać do jednego stringa i później coś tam sortować i sumować???

Ok to poproszę Cię o pomoc

Zapytanie:
SELECT O.OPE_ID_WYROBU AS NR_SERYJNY,
OU.OPU_NR_RCP,
O.OPE_JEDNOSTKI
FROM JM_OPERACJE O LEFT JOIN JM_OPERACJE_UZY OU ON OU.OPE_UNID=O.OPE_UNID
WHERE TO_CHAR(O.OPE_DATA_WYK, 'YYYY-MM-DD')>='2009-12-09' AND
TO_CHAR(O.OPE_DATA_WYK, 'YYYY-MM-DD')<='2009-12-09' AND
O.OPE_ID_BRAMKI='OG-02' AND
O.OPE_STATUS='1'

Otrzymany wynik:
NR_SERYJNY OPU_NR_RCP OPE_JEDNOSTKI
OCP59017916 895 1,5
OCP59017916 1434 1,5
OCP59017923 1290 1
OCP59017923 1219 1
OCP59017946 1640 1,5
OCP59017946 1218 1,5
OLR59006222 1396 2,5
OLR59006222 456 2,5
OLR59006219 1396 2,5
OLR59006219 456 2,5

Chce otrzymać numery użytkowników i zliczyć im jednostki z tym że jeśli numer seryjny występuje więcej niż jeden raz przypisuje użytkownikowi jednostki podzielone przez ilość wystąpień numeru seryjnego.

W tym przypadku będzie wyglądało to następująco

OPU_NR_RCP OPE_JEDNOSTKI
895 0,75
1434 0,75
456 1,25(z numeru seryjnegoOLR59006222)+1,25(z numeru seryjnego OLR59006219)=2,5

Proszę Cię o stworzenie takiego zapytania.

0

po to_char zakładam, że to oracle

SELECT
  x.jednostki,
  ou.opu_nr_rcp
FROM
  (SELECT
    ope_unid,
    sum(o.ope_jednostki / 
    (SELECT 
      count(*) 
    FROM 
      jm_operacje q
    WHERE 
      Trunc(q.ope_data_wyk) >= To_date('2009-12-09', 'YYYY-MM-DD')
      AND Trunc(q.ope_data_wyk) <= To_date('2009-12-09', 'YYYY-MM-DD')
      AND q.ope_id_bramki = o.ope_id_bramki 
      AND q.ope_status= o.ope_status
      AND q.ope_unid = o.ope_unid)) jednostki
  FROM
    jm_operacje o
  WHERE
    Trunc(o.ope_data_wyk) >= To_date('2009-12-09', 'YYYY-MM-DD')
    AND Trunc(o.ope_data_wyk) <= To_date('2009-12-09', 'YYYY-MM-DD')
    AND o.ope_id_bramki = 'OG-02' 
    AND o.ope_status='1'  
  GROUP BY
    o.ope_id_wyrobu) x
  LEFT JOIN jm_operacje_uzy ou ON ou.ope_unid = x.ope_unid
0
Misiekd napisał(a)

po to_char zakładam, że to oracle

SELECT
  x.jednostki,
  ou.opu_nr_rcp
FROM
  (SELECT
    ope_unid,
    sum(o.ope_jednostki / 
    (SELECT 
      count(*) 
    FROM 
      jm_operacje q
    WHERE 
      Trunc(q.ope_data_wyk) >= To_date('2009-12-09', 'YYYY-MM-DD')
      AND Trunc(q.ope_data_wyk) <= To_date('2009-12-09', 'YYYY-MM-DD')
      AND q.ope_id_bramki = o.ope_id_bramki 
      AND q.ope_status= o.ope_status
      AND q.ope_unid = o.ope_unid)) jednostki
  FROM
    jm_operacje o
  WHERE
    Trunc(o.ope_data_wyk) >= To_date('2009-12-09', 'YYYY-MM-DD')
    AND Trunc(o.ope_data_wyk) <= To_date('2009-12-09', 'YYYY-MM-DD')
    AND o.ope_id_bramki = 'OG-02' 
    AND o.ope_status='1'  
  GROUP BY
    o.ope_id_wyrobu) x
  LEFT JOIN jm_operacje_uzy ou ON ou.ope_unid = x.ope_unid

dzięki wielkie, jesteś mistrz świata :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1