Temat: [Oracle] Sumowanie tylko unikalnych wartości

Witam,

W tabeli dla każdego dnia występuje po kilkadziesiąt krotek z tą samą liczbą "wykonywanych_polacz" za ten dzień, użycie distincta sprawdza się do momentu gdy w dwa różne sumowane dni nie będzie tej samej liczby połączeń, które distinct złączy w jedno.
Gdybym mógł jakoś grupować po polu eventdate nie byłoby problemu, wtedy wpis np z 7 stycznia na 453 wykonywanych_polacz nie "scaliłby się" z wpisem z 14 stycznia 453 wykonywanych_polacz.

(sum(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-1) AND Add_Months(Trunc(SYSDATE,'mm'),-0)-1 THEN wykonywanych_polacz END),0)

Co można zrobić by temu zapobiec?Ten post został edytowany przez Autora dnia 02.02.15 o godzinie 14:55
Paweł Broda

Paweł Broda Software Engineer

Temat: [Oracle] Sumowanie tylko unikalnych wartości

Ale o co chodzi? Czytałem ze dwa razy i nie rozumiem...

Temat: [Oracle] Sumowanie tylko unikalnych wartości

Przykład dużo by wyjaśnił.

Może czytelniejszy byłby zapis (poniżej pseudo kod):
select date, sum(cost)
from (select distinct date, id, cost from YourTable)
group by date


Czy możesz zrobić distinct tylko dla tego co masz sumować?

Może dotyczyć to (?):
http://psoug.org/definition/sum.htmTen post został edytowany przez Autora dnia 02.02.15 o godzinie 21:15
Wojciech Muszyński

Wojciech Muszyński Tworzenie aplikacji
bazodanowych
(Oracle, APEX,
Access)

Temat: [Oracle] Sumowanie tylko unikalnych wartości

Zgaduję, że zapytanie ma zwrócić liczbę połączeń w miesiącu poprzednim, a problem polega na tym, że zapisy dla poszczególnych dni się powtarzają.
(Wiele event'ów - każdy z tą samą datą i liczbą połączeń. Przy okazji - świadczy to o słabym stopniu znormalizowania bazy!)

Jeżeli dobrze odgadłem na czym polega problem,
to zapytanie powinno mieć postać:


select sum(wykonywanych_polacz)
from (select distinct
eventdate,
wykonywanych_polacz
from YourTable)
where eventdate between add_months(trunc(sysdate,'mm'),-1)
and add_months(trunc(sysdate,'mm'),-0)-1


Ten post został edytowany przez Autora dnia 03.02.15 o godzinie 07:06

Temat: [Oracle] Sumowanie tylko unikalnych wartości

Witam,
Przepraszam ze nie wyraziłem się precyzyjnie chciałem uniknąć wklejanie tego co poniżej:)
To z czym sobie nie mogę poradzić jest częścią dłuższego zapytania, w którym wyciągam dane z 10 ostaniach miesięcy osobno (mam jeszcze analogiczne widoki dla dni i tygodni).
Gdyby nie ta liczba_polaczen, która jest dołączane z tabeli będącej zrzutem z innej bazy nie byłoby problemu - jedyne po czym mogę ją połączyć jest data, która powoduje multiplikacje (screen).

Dłuższe zapytanie korzysta z widoku przeliczeniowego:

SELECT
refno,
cc.acceptancedate poczatek,
cc.udf_koniec_obslugi koniec,
e.id,
e.eventdate,
kolumna,
CASE WHEN variant='H' THEN Amount END nal,
CASE WHEN variant='E' THEN Amount END plat,
cc.udf_status,
ILOSC_WYKONANYCH_POLACZEN
FROM ika_ccase cc
JOIN ika_event e ON e.ccaseid=cc.id
left JOIN klient_polaczenia ON DATA=e.eventdate
left join ika_raport_kody_sl ksl ON ksl.EVENTTEMPLATEID=e.EVENTTEMPLATEID and ksl.raport='klient'



Obrazek


tabelkę klient_polaczenia mógłbym dołączać dopiero w tym dłuższym zapytaniu, ale gdy kombinowałem z podselectem, był błąd z grupowaniem.


SELECT
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-10) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-9)-1 THEN refno END) sprawy_10,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-9) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-8)-1 THEN refno END) sprawy_09,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-8) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-7)-1 THEN refno END) sprawy_08,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-7) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-6)-1 THEN refno END) sprawy_07,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-6) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-5)-1 THEN refno END) sprawy_06,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-5) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-4)-1 THEN refno END) sprawy_05,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-4) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-3)-1 THEN refno END) sprawy_04,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-3) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-2)-1 THEN refno END) sprawy_03,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-2) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-1)-1 THEN refno END) sprawy_02,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-1) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-0)-1 THEN refno END) sprawy_01,
--daty
trim(To_Char(Add_Months(Trunc(SYSDATE,'mm'),-10),'yyyy-Month')) data_10,
trim(To_Char(Add_Months(Trunc(SYSDATE,'mm'),-9),'yyyy-Month')) data_09,
trim(To_Char(Add_Months(Trunc(SYSDATE,'mm'),-8),'yyyy-Month')) data_08,
trim(To_Char(Add_Months(Trunc(SYSDATE,'mm'),-7),'yyyy-Month')) data_07,
trim(To_Char(Add_Months(Trunc(SYSDATE,'mm'),-6),'yyyy-Month')) data_06,
trim(To_Char(Add_Months(Trunc(SYSDATE,'mm'),-5),'yyyy-Month')) data_05,
trim(To_Char(Add_Months(Trunc(SYSDATE,'mm'),-4),'yyyy-Month')) data_04,
trim(To_Char(Add_Months(Trunc(SYSDATE,'mm'),-3),'yyyy-Month')) data_03,
trim(To_Char(Add_Months(Trunc(SYSDATE,'mm'),-2),'yyyy-Month')) data_02,
trim(To_Char(Add_Months(Trunc(SYSDATE,'mm'),-1),'yyyy-Month')) data_01,
--należoności
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-10) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-9)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-9)-1 THEN nal END),0) nal_10,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-9) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-8)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-8)-1 THEN nal END),0) nal_09,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-8) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-7)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-7)-1 THEN nal END),0) nal_08,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-7) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-6)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-6)-1 THEN nal END),0) nal_07,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-6) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-5)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-5)-1 THEN nal END),0) nal_06,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-5) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-4)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-4)-1 THEN nal END),0) nal_05,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-4) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-3)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-3)-1 THEN nal END),0) nal_04,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-3) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-2)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-2)-1 THEN nal END),0) nal_03,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-2) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-1)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-1)-1 THEN nal END),0) nal_02,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-1) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-0)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-0)-1 THEN nal END),0) nal_01,
--płatności
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-10) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-9)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-9)-1 THEN plat END),0) plat_10,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-9) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-8)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-8)-1 THEN plat END),0) plat_09,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-8) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-7)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-7)-1 THEN plat END),0) plat_08,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-7) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-6)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-6)-1 THEN plat END),0) plat_07,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-6) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-5)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-5)-1 THEN plat END),0) plat_06,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-5) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-4)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-4)-1 THEN plat END),0) plat_05,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-4) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-3)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-3)-1 THEN plat END),0) plat_04,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-3) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-2)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-2)-1 THEN plat END),0) plat_03,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-2) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-1)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-1)-1 THEN plat END),0) plat_02,
nvl(Sum(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-1) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-0)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-0)-1 THEN plat END),0) plat_01,
-- ilość spraw z wpłatami
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-10) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-9)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-9)-1 AND plat<>0 THEN refno END) spr_z_wplat_10,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-9) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-8)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-8)-1 AND plat<>0 THEN refno END) spr_z_wplat_09,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-8) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-7)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-7)-1 AND plat<>0 THEN refno END) spr_z_wplat_08,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-7) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-6)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-6)-1 AND plat<>0 THEN refno END) spr_z_wplat_07,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-6) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-5)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-5)-1 AND plat<>0 THEN refno END) spr_z_wplat_06,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-5) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-4)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-4)-1 AND plat<>0 THEN refno END) spr_z_wplat_05,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-4) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-3)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-3)-1 AND plat<>0 THEN refno END) spr_z_wplat_04,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-3) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-2)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-2)-1 AND plat<>0 THEN refno END) spr_z_wplat_03,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-2) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-1)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-1)-1 AND plat<>0 THEN refno END) spr_z_wplat_02,
count(distinct CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-1) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-0)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-0)-1 AND plat<>0 THEN refno END) spr_z_wplat_01,
-- Ilość podjętych prób kontaktu
Nvl(count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-10) AND Add_Months(Trunc(SYSDATE,'mm'),-9)-1 THEN wykonywanych_polacz END),0) prob_kontaktu_10,
Nvl(count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-9) AND Add_Months(Trunc(SYSDATE,'mm'),-8)-1 THEN wykonywanych_polacz END),0) prob_kontaktu_09,
Nvl(count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-8) AND Add_Months(Trunc(SYSDATE,'mm'),-7)-1 THEN wykonywanych_polacz END),0) prob_kontaktu_08,
Nvl(count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-7) AND Add_Months(Trunc(SYSDATE,'mm'),-6)-1 THEN wykonywanych_polacz END),0) prob_kontaktu_07,
Nvl(count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-6) AND Add_Months(Trunc(SYSDATE,'mm'),-5)-1 THEN wykonywanych_polacz END),0) prob_kontaktu_06,
Nvl(count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-5) AND Add_Months(Trunc(SYSDATE,'mm'),-4)-1 THEN wykonywanych_polacz END),0) prob_kontaktu_05,
Nvl(count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-4) AND Add_Months(Trunc(SYSDATE,'mm'),-3)-1 THEN wykonywanych_polacz END),0) prob_kontaktu_04,
Nvl(count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-3) AND Add_Months(Trunc(SYSDATE,'mm'),-2)-1 THEN wykonywanych_polacz END),0) prob_kontaktu_03,
Nvl(count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-2) AND Add_Months(Trunc(SYSDATE,'mm'),-1)-1 THEN wykonywanych_polacz END),0) prob_kontaktu_02,
Nvl(count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-1) AND Add_Months(Trunc(SYSDATE,'mm'),-0)-1 THEN wykonywanych_polacz END),0) prob_kontaktu_01,
-- ilość kontaktów z dłużnikiem
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-10) AND Add_Months(Trunc(SYSDATE,'mm'),-9)-1 AND kolumna IN ('Kontakty In','Kontakty Out') THEN 1 END),0) kont_z_dluzn10,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-9) AND Add_Months(Trunc(SYSDATE,'mm'),-8)-1 AND kolumna IN ('Kontakty In','Kontakty Out') THEN 1 END),0) kont_z_dluzn09,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-8) AND Add_Months(Trunc(SYSDATE,'mm'),-7)-1 AND kolumna IN ('Kontakty In','Kontakty Out') THEN 1 END),0) kont_z_dluzn08,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-7) AND Add_Months(Trunc(SYSDATE,'mm'),-6)-1 AND kolumna IN ('Kontakty In','Kontakty Out') THEN 1 END),0) kont_z_dluzn07,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-6) AND Add_Months(Trunc(SYSDATE,'mm'),-5)-1 AND kolumna IN ('Kontakty In','Kontakty Out') THEN 1 END),0) kont_z_dluzn06,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-5) AND Add_Months(Trunc(SYSDATE,'mm'),-4)-1 AND kolumna IN ('Kontakty In','Kontakty Out') THEN 1 END),0) kont_z_dluzn05,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-4) AND Add_Months(Trunc(SYSDATE,'mm'),-3)-1 AND kolumna IN ('Kontakty In','Kontakty Out') THEN 1 END),0) kont_z_dluzn04,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-3) AND Add_Months(Trunc(SYSDATE,'mm'),-2)-1 AND kolumna IN ('Kontakty In','Kontakty Out') THEN 1 END),0) kont_z_dluzn03,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-2) AND Add_Months(Trunc(SYSDATE,'mm'),-1)-1 AND kolumna IN ('Kontakty In','Kontakty Out') THEN 1 END),0) kont_z_dluzn02,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-1) AND Add_Months(Trunc(SYSDATE,'mm'),-0)-1 AND kolumna IN ('Kontakty In','Kontakty Out') THEN 1 END),0) kont_z_dluzn01,
--kontaktów przychdozacych z dłużnikiem
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-10) AND Add_Months(Trunc(SYSDATE,'mm'),-9)-1 AND kolumna = 'Kontakty In' THEN 1 END),0) kont_przych_z_dluzn10,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-9) AND Add_Months(Trunc(SYSDATE,'mm'),-8)-1 AND kolumna = 'Kontakty In' THEN 1 END),0) kont_przych_z_dluzn09,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-8) AND Add_Months(Trunc(SYSDATE,'mm'),-7)-1 AND kolumna = 'Kontakty In' THEN 1 END),0) kont_przych_z_dluzn08,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-7) AND Add_Months(Trunc(SYSDATE,'mm'),-6)-1 AND kolumna = 'Kontakty In' THEN 1 END),0) kont_przych_z_dluzn07,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-6) AND Add_Months(Trunc(SYSDATE,'mm'),-5)-1 AND kolumna = 'Kontakty In' THEN 1 END),0) kont_przych_z_dluzn06,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-5) AND Add_Months(Trunc(SYSDATE,'mm'),-4)-1 AND kolumna = 'Kontakty In' THEN 1 END),0) kont_przych_z_dluzn05,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-4) AND Add_Months(Trunc(SYSDATE,'mm'),-3)-1 AND kolumna = 'Kontakty In' THEN 1 END),0) kont_przych_z_dluzn04,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-3) AND Add_Months(Trunc(SYSDATE,'mm'),-2)-1 AND kolumna = 'Kontakty In' THEN 1 END),0) kont_przych_z_dluzn03,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-2) AND Add_Months(Trunc(SYSDATE,'mm'),-1)-1 AND kolumna = 'Kontakty In' THEN 1 END),0) kont_przych_z_dluzn02,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-1) AND Add_Months(Trunc(SYSDATE,'mm'),-0)-1 AND kolumna = 'Kontakty In' THEN 1 END),0) kont_przych_z_dluzn01,
--kontaktów przychdozących (osoba niekompetentna)
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-10) AND Add_Months(Trunc(SYSDATE,'mm'),-9)-1 AND kolumna = 'Kontakty In niekompet' THEN 1 END),0) kont_przych_os_niekomp10,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-9) AND Add_Months(Trunc(SYSDATE,'mm'),-8)-1 AND kolumna = 'Kontakty In niekompet' THEN 1 END),0) kont_przych_os_niekomp09,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-8) AND Add_Months(Trunc(SYSDATE,'mm'),-7)-1 AND kolumna = 'Kontakty In niekompet' THEN 1 END),0) kont_przych_os_niekomp08,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-7) AND Add_Months(Trunc(SYSDATE,'mm'),-6)-1 AND kolumna = 'Kontakty In niekompet' THEN 1 END),0) kont_przych_os_niekomp07,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-6) AND Add_Months(Trunc(SYSDATE,'mm'),-5)-1 AND kolumna = 'Kontakty In niekompet' THEN 1 END),0) kont_przych_os_niekomp06,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-5) AND Add_Months(Trunc(SYSDATE,'mm'),-4)-1 AND kolumna = 'Kontakty In niekompet' THEN 1 END),0) kont_przych_os_niekomp05,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-4) AND Add_Months(Trunc(SYSDATE,'mm'),-3)-1 AND kolumna = 'Kontakty In niekompet' THEN 1 END),0) kont_przych_os_niekomp04,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-3) AND Add_Months(Trunc(SYSDATE,'mm'),-2)-1 AND kolumna = 'Kontakty In niekompet' THEN 1 END),0) kont_przych_os_niekomp03,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-2) AND Add_Months(Trunc(SYSDATE,'mm'),-1)-1 AND kolumna = 'Kontakty In niekompet' THEN 1 END),0) kont_przych_os_niekomp02,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-1) AND Add_Months(Trunc(SYSDATE,'mm'),-0)-1 AND kolumna = 'Kontakty In niekompet' THEN 1 END),0) kont_przych_os_niekomp01,
--ilość przyjętych deklaracji
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-10) AND Add_Months(Trunc(SYSDATE,'mm'),-9)-1 AND kolumna = 'Przyjete deklaracje' THEN 1 END),0) przyj_dekl_10,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-9) AND Add_Months(Trunc(SYSDATE,'mm'),-8)-1 AND kolumna = 'Przyjete deklaracje' THEN 1 END),0) przyj_dekl_09,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-8) AND Add_Months(Trunc(SYSDATE,'mm'),-7)-1 AND kolumna = 'Przyjete deklaracje' THEN 1 END),0) przyj_dekl_08,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-7) AND Add_Months(Trunc(SYSDATE,'mm'),-6)-1 AND kolumna = 'Przyjete deklaracje' THEN 1 END),0) przyj_dekl_07,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-6) AND Add_Months(Trunc(SYSDATE,'mm'),-5)-1 AND kolumna = 'Przyjete deklaracje' THEN 1 END),0) przyj_dekl_06,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-5) AND Add_Months(Trunc(SYSDATE,'mm'),-4)-1 AND kolumna = 'Przyjete deklaracje' THEN 1 END),0) przyj_dekl_05,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-4) AND Add_Months(Trunc(SYSDATE,'mm'),-3)-1 AND kolumna = 'Przyjete deklaracje' THEN 1 END),0) przyj_dekl_04,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-3) AND Add_Months(Trunc(SYSDATE,'mm'),-2)-1 AND kolumna = 'Przyjete deklaracje' THEN 1 END),0) przyj_dekl_03,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-2) AND Add_Months(Trunc(SYSDATE,'mm'),-1)-1 AND kolumna = 'Przyjete deklaracje' THEN 1 END),0) przyj_dekl_02,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-1) AND Add_Months(Trunc(SYSDATE,'mm'),-0)-1 AND kolumna = 'Przyjete deklaracje' THEN 1 END),0) przyj_dekl_01,
--ilośc odmów spłaty
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-10) AND Add_Months(Trunc(SYSDATE,'mm'),-9)-1 AND kolumna = 'Odmowy splaty' THEN 1 END),0) odm_splaty_10,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-9) AND Add_Months(Trunc(SYSDATE,'mm'),-8)-1 AND kolumna = 'Odmowy splaty' THEN 1 END),0) odm_splaty_09,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-8) AND Add_Months(Trunc(SYSDATE,'mm'),-7)-1 AND kolumna = 'Odmowy splaty' THEN 1 END),0) odm_splaty_08,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-7) AND Add_Months(Trunc(SYSDATE,'mm'),-6)-1 AND kolumna = 'Odmowy splaty' THEN 1 END),0) odm_splaty_07,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-6) AND Add_Months(Trunc(SYSDATE,'mm'),-5)-1 AND kolumna = 'Odmowy splaty' THEN 1 END),0) odm_splaty_06,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-5) AND Add_Months(Trunc(SYSDATE,'mm'),-4)-1 AND kolumna = 'Odmowy splaty' THEN 1 END),0) odm_splaty_05,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-4) AND Add_Months(Trunc(SYSDATE,'mm'),-3)-1 AND kolumna = 'Odmowy splaty' THEN 1 END),0) odm_splaty_04,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-3) AND Add_Months(Trunc(SYSDATE,'mm'),-2)-1 AND kolumna = 'Odmowy splaty' THEN 1 END),0) odm_splaty_03,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-2) AND Add_Months(Trunc(SYSDATE,'mm'),-1)-1 AND kolumna = 'Odmowy splaty' THEN 1 END),0) odm_splaty_02,
nvl(Sum(CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-1) AND Add_Months(Trunc(SYSDATE,'mm'),-0)-1 AND kolumna = 'Odmowy splaty' THEN 1 END),0) odm_splaty_01,
--ilośc spraw z kontaktem
count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-10) AND Add_Months(Trunc(SYSDATE,'mm'),-9)-1 AND kolumna in ('Kontakty In','Kontakty Out','Kontakty In niekompet','Kontakty Out niekompet') THEN refno END) spr_z_kontakt10,
count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-9) AND Add_Months(Trunc(SYSDATE,'mm'),-8)-1 AND kolumna in ('Kontakty In','Kontakty Out','Kontakty In niekompet','Kontakty Out niekompet') THEN refno END) spr_z_kontakt09,
count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-8) AND Add_Months(Trunc(SYSDATE,'mm'),-7)-1 AND kolumna in ('Kontakty In','Kontakty Out','Kontakty In niekompet','Kontakty Out niekompet') THEN refno END) spr_z_kontakt08,
count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-7) AND Add_Months(Trunc(SYSDATE,'mm'),-6)-1 AND kolumna in ('Kontakty In','Kontakty Out','Kontakty In niekompet','Kontakty Out niekompet') THEN refno END) spr_z_kontakt07,
count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-6) AND Add_Months(Trunc(SYSDATE,'mm'),-5)-1 AND kolumna in ('Kontakty In','Kontakty Out','Kontakty In niekompet','Kontakty Out niekompet') THEN refno END) spr_z_kontakt06,
count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-5) AND Add_Months(Trunc(SYSDATE,'mm'),-4)-1 AND kolumna in ('Kontakty In','Kontakty Out','Kontakty In niekompet','Kontakty Out niekompet') THEN refno END) spr_z_kontakt05,
count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-4) AND Add_Months(Trunc(SYSDATE,'mm'),-3)-1 AND kolumna in ('Kontakty In','Kontakty Out','Kontakty In niekompet','Kontakty Out niekompet') THEN refno END) spr_z_kontakt04,
count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-3) AND Add_Months(Trunc(SYSDATE,'mm'),-2)-1 AND kolumna in ('Kontakty In','Kontakty Out','Kontakty In niekompet','Kontakty Out niekompet') THEN refno END) spr_z_kontakt03,
count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-2) AND Add_Months(Trunc(SYSDATE,'mm'),-1)-1 AND kolumna in ('Kontakty In','Kontakty Out','Kontakty In niekompet','Kontakty Out niekompet') THEN refno END) spr_z_kontakt02,
count(distinct CASE WHEN EVENTDATE BETWEEN Add_Months(Trunc(SYSDATE,'mm'),-1) AND Add_Months(Trunc(SYSDATE,'mm'),-0)-1 AND kolumna in ('Kontakty In','Kontakty Out','Kontakty In niekompet','Kontakty Out niekompet') THEN refno END) spr_z_kontakt01,
--confirmed
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-10) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-9)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-9)-1 AND kolumna in ('Confirmed') THEN 1 END) confirmed_10,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-9) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-8)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-8)-1 AND kolumna in ('Confirmed') THEN 1 END) confirmed_09,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-8) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-7)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-7)-1 AND kolumna in ('Confirmed') THEN 1 END) confirmed_08,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-7) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-6)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-6)-1 AND kolumna in ('Confirmed') THEN 1 END) confirmed_07,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-6) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-5)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-5)-1 AND kolumna in ('Confirmed') THEN 1 END) confirmed_06,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-5) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-4)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-4)-1 AND kolumna in ('Confirmed') THEN 1 END) confirmed_05,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-4) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-3)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-3)-1 AND kolumna in ('Confirmed') THEN 1 END) confirmed_04,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-3) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-2)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-2)-1 AND kolumna in ('Confirmed') THEN 1 END) confirmed_03,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-2) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-1)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-1)-1 AND kolumna in ('Confirmed') THEN 1 END) confirmed_02,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-1) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-0)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-0)-1 AND kolumna in ('Confirmed') THEN 1 END) confirmed_01,
--repaid
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-10) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-9)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-9)-1 AND kolumna in ('Repaid') THEN 1 END) Repaid_10,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-9) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-8)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-8)-1 AND kolumna in ('Repaid') THEN 1 END) Repaid_09,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-8) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-7)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-7)-1 AND kolumna in ('Repaid') THEN 1 END) Repaid_08,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-7) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-6)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-6)-1 AND kolumna in ('Repaid') THEN 1 END) Repaid_07,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-6) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-5)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-5)-1 AND kolumna in ('Repaid') THEN 1 END) Repaid_06,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-5) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-4)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-4)-1 AND kolumna in ('Repaid') THEN 1 END) Repaid_05,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-4) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-3)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-3)-1 AND kolumna in ('Repaid') THEN 1 END) Repaid_04,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-3) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-2)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-2)-1 AND kolumna in ('Repaid') THEN 1 END) Repaid_03,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-2) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-1)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-1)-1 AND kolumna in ('Repaid') THEN 1 END) Repaid_02,
count(CASE WHEN koniec >= Add_Months(Trunc(SYSDATE,'mm'),-1) AND poczatek <= Add_Months(Trunc(SYSDATE,'mm'),-0)-1 AND EVENTDATE <= Add_Months(Trunc(SYSDATE,'mm'),-0)-1 AND kolumna in ('Repaid') THEN 1 END) Repaid_01
FROM rap_klient_monitoring_v
Ten post został edytowany przez Autora dnia 03.02.15 o godzinie 08:54

Temat: [Oracle] Sumowanie tylko unikalnych wartości

Przeglądam to zapytanie z widokiem i się zastanawiam czy chciałeś otrzymać raport tylko dla 'klient' i wartość ta jest przechowywana w słowniku ika_raport_kody_sl?
Nie wiem czy zapytanie zwraca to co chciałeś. Skoro chcesz zawęzić dane tylko dla wartości 'klient' to może lepiej nie robić left join tylko where (?):

SELECT
refno,
cc.acceptancedate poczatek,
cc.udf_koniec_obslugi koniec,
e.id,
e.eventdate,
kolumna,
CASE WHEN variant='H' THEN Amount END nal,
CASE WHEN variant='E' THEN Amount END plat,
cc.udf_status,
ILOSC_WYKONANYCH_POLACZEN
FROM ika_ccase cc
JOIN ika_event e ON e.ccaseid=cc.id
left JOIN klient_polaczenia ON DATA=e.eventdate
WHERE e.EVENTTEMPLATEID = (SELECT ksl.EVENTTEMPLATEID FROM ika_raport_kody_sl ksl WHERE ksl.raport='klient')


(Przy odwołaniach do kolumn lepiej nadawać aliasy ze względu na czytelność co jest z której tabeli - nie znam struktury bazy)

Temat: [Oracle] Sumowanie tylko unikalnych wartości

Tak wiem stosowanie warunków w sekcji WHERE jest bardziej "po bożemu", ale często dodaje podstawowe warunki już przy JOIN'ach, nie znalazłem informacji by czemuś to szkodziło.

Jak słusznie zauważyłaś tabela ika_raport_kody_sl jest tabelą słownikową, a dokładnie przeliczeniową.
Ma ona zaoszczędzać pracę.

Przykładowo jako wniosek traktowane są zdarzenia z listą 50 kodów, jako kontakt przychdozacy 70 kodów itd.
pisanie za każdym razem w zapytaniach warunków dla tylko jednej kategorii:

INSERT INTO ika_raport_kody_sl
(SELECT id, eventcode, 'Kredito', sysdate, 'Kontakty In'
FROM ika_eventtemplate et
WHERE eventcode in ('TIS','TIZF','TIOPR','TIP','TIN','TIKD','TIKDT')
);

INSERT INTO ika_raport_kody_sl
(SELECT id, eventcode, 'Kredito', sysdate, 'Kontakty Out'
FROM ika_eventtemplate et
WHERE eventcode in ('TOS','TOP','TOPR','TOOR','TOOW','TON','TOKD','TOKDT','TOZFK')
);

INSERT INTO ika_raport_kody_sl
(SELECT id, eventcode, 'Kredito', sysdate, 'Kontakty In niekompet'
FROM ika_eventtemplate et
WHERE eventcode in ('TISC','TIPC','TINC','TIDD')
);

INSERT INTO ika_raport_kody_sl
(SELECT id, eventcode, 'Kredito', sysdate, 'Kontakty Out niekompet'
FROM ika_eventtemplate et
WHERE eventcode in ('TOM','TOSC','TOPC','TONC')
);

INSERT INTO ika_raport_kody_sl
(SELECT id, eventcode, 'Kredito', sysdate, 'Przyjete deklaracje'
FROM ika_eventtemplate et
WHERE eventcode in ('TIP','TOP','TIPC','TOPC')
);

INSERT INTO ika_raport_kody_sl
(SELECT id, eventcode, 'Kredito', sysdate, 'Odmowy splaty'
FROM ika_eventtemplate et
WHERE eventcode in ('TIN','TON','TIKDT','TOKDT','TINC','TONC')
);

INSERT INTO ika_raport_kody_sl
(SELECT id, eventcode, 'Kredito', sysdate, 'Confirmed'
FROM ika_eventtemplate et
WHERE eventcode in ('NCONF')
);

INSERT INTO ika_raport_kody_sl
(SELECT id, eventcode, 'Kredito', sysdate, 'Repaid'
FROM ika_eventtemplate et
WHERE eventcode in ('NPAID')
);


po to ta przeliczeniówka.



Małgorzata B.:
Przeglądam to zapytanie z widokiem i się zastanawiam czy chciałeś otrzymać raport tylko dla 'klient' i wartość ta jest przechowywana w słowniku ika_raport_kody_sl?
Nie wiem czy zapytanie zwraca to co chciałeś. Skoro chcesz zawęzić dane tylko dla wartości 'klient' to może lepiej nie robić left join tylko where (?):

SELECT
refno,
cc.acceptancedate poczatek,
cc.udf_koniec_obslugi koniec,
e.id,
e.eventdate,
kolumna,
CASE WHEN variant='H' THEN Amount END nal,
CASE WHEN variant='E' THEN Amount END plat,
cc.udf_status,
ILOSC_WYKONANYCH_POLACZEN
FROM ika_ccase cc
JOIN ika_event e ON e.ccaseid=cc.id
left JOIN klient_polaczenia ON DATA=e.eventdate
WHERE e.EVENTTEMPLATEID = (SELECT ksl.EVENTTEMPLATEID FROM ika_raport_kody_sl ksl WHERE ksl.raport='klient')


(Przy odwołaniach do kolumn lepiej nadawać aliasy ze względu na czytelność co jest z której tabeli - nie znam struktury bazy)

Temat: [Oracle] Sumowanie tylko unikalnych wartości

Odwołując się do wcześniejszej mojej odpowiedzi, a dokładnie warunku:
 SELECT ....
FROM ...
WHERE e.EVENTTEMPLATEID = (SELECT ksl.EVENTTEMPLATEID FROM ika_raport_kody_sl ksl WHERE ksl.raport='klient')


to powyższy zapis daje pewność, że podzapytanie (SELECT ksl.EVENTTEMPLATEID FROM ika_raport_kody_sl ksl WHERE ksl.raport='klient') zwróci tylko jedną wartość. Jeśli byłoby więcej wartości 'klient' w tabeli ika_raport_kody_sl w polu raport zwrócony zostanie błąd.
Użycie zaś left join pozwoli wykonać zapytanie w przypadku, gdy w słowniku są dwie takie same wartości. W wyniku zwrócone zostaną dwa wiersze z danymi.
Ale to może wystąpić, gdy słowniki są mocno rozbudowane i zawierają np daty obowiązywania.

Wydaje mi się, że łączenie po dacie to za mało. Tabel klient_polaczenia powinna być łączona z jakąś inną tabelą po jakimś sensownym kluczem. Jaka relacja jest w tej tabeli wiele-do-wielu?

W przykładzie z tabelą dual https://community.oracle.com/thread/1033518
sytuacja też chyba jest podobna jak u Ciebie?

Następna dyskusja:

Sumowanie w polu tekstowym ...




Wyślij zaproszenie do