Temat: Funkcje analityczne
Witajcie,mam problem ze stworzeniem macierzy wykorzystując funcke analityczne.
Mam tabele
CREATE TABLE "TRANSAKCJE" (
"ID_TRANSAKCJI" NUMBER(12, 0) NOT NULL ENABLE,
"NR_KONTA" VARCHAR2(30) NOT NULL ENABLE,
"DATA" DATE NOT NULL ENABLE,
"KWOTA" NUMBER(10, 2) NOT NULL ENABLE,
"TYP" VARCHAR2(10),
"KATEGORIA" VARCHAR2(20));
Chciałbym uzyskać poniższy wynik (coś jak tabela przestawna w Excelu)
NR_KONTA WPŁATA WYPŁATA ŚREDNIA:
11-11111111 1400,00 -257,83 467,47
22-22222222 1487,50 -300,06 593,72
33-33333333 1271,43 -225,61 429,34
ŚREDNIA: 1390,91 -259,67 496,84
jest to niejako przekształcony w tabelę przestawną wynik zapytania:
SELECT nr_konta, typ, avg(kwota)
FROM transakcje
GROUP BY cube(nr_konta, typ)
ORDER BY nr_konta, typ
którego wynikiem jest:
NR_KONTA TYP AVG(KWOTA)
--------------- ---------- ----------
11-11111111 WPŁATA 1400,00
11-11111111 WYPŁATA -257,83
11-11111111 467,47
22-22222222 WPŁATA 1487,50
22-22222222 WYPŁATA -300,06
22-22222222 593,72
33-33333333 WPŁATA 1271,43
33-33333333 WYPŁATA -225,61
33-33333333 429,34
WPŁATA 1390,91
WYPŁATA -259,67
496,84
Napisałem takiego selecta:
select DECODE(NR_KONTA,null,'srednia',NR_KONTA) NUMER_KONTA,
ROUND(AVG(DECODE(KWOTA,'Wpłata','pusta',KWOTA)),2)WPLACONO,
ROUND(AVG(DECODE(KWOTA,'Wypłata','jakas',KWOTA)),2) WYPLACONO,
ROUND(AVG(kwota),2) srednia
from TRANSAKCJE
group by grouping sets(NR_KONTA,())
i zwraca on
NUMER_KONTA WPLACONO WYPLACONO SREDNIA
------------------------------ ---------------------- ---------------------- ----------------------
11-11111111 710,79 710,79 710,79
22-22222222 811,5 811,5 811,5
33-33333333 650,79 650,79 650,79
srednia 726,72 726,72 726,72
Czyli średnia dla wpłat i wypłat jest taka sama a w rzeczywistości tak nie jest.
Nie wiem co powinienem zmienić w zapytaniu?
dzięki za pomoc:)Maciej Kamela edytował(a) ten post dnia 03.01.12 o godzinie 19:01