Samozłączenie… Tym razem popracujemy na jednej tabeli, to nie pomyłka :-)


Cześć Marcinie,

Samozłączenie… Tym razem popracujemy na jednej tabeli, to nie pomyłka :-)

Przykładowy zestaw danych prezentuje rysunek, mamy tabelę ROZLICZENIA, tabela to trzy pola, DATA_STANU, KONTRAKT, SALDO. Do tej tabeli  na koniec roku zapisujemy dane o aktualnych stanach rozliczeń dla poszczególnych kontraktów, ale tylko kontrakty, które nie są kompletnie spłacone. Uwaga, tu jest kluczowy haczyk, który będzie miał istotne znaczenie dla zadania. Nie ma w danej dacie stanu kontraktu jeszcze niezawartego (oczywiste :-)) ale też już kompletnie rozliczonego.

I teraz Marcinku (po raz pierwszy tak zdrobniale) zadanie, jakie kwoty spłat uzyskaliśmy dla kontraktów, które były do rozliczenia na koniec roku 2010 ich stanem na koniec roku 2012. Po prostu oblicz kwotę spłat kontraktów z końca 2010 przez dwa kolejne lata, do stanu na koniec 2012.

Rozwiązanie w EXCEL prezentuję na tym samym obrazku, zwróć uwagę, iż zastosowałem dwie fajne funkcjonalności wbudowane w EXCEL. Po pierwsze zastosowałem wyszukaj.pionowo, po drugie jeżeli.błąd. Tę drugą funkcjonalność EXCELA wykorzystuję, ponieważ w dacie 31 grudnia 2012 nie ma już całkowicie rozliczonych kontraktów, dla których saldo w dacie 31 grudnia 2010 nie było zerowe. Zastosowanie jeżeli.błąd  powoduje, iż zamiast komunikatu błędu #N/D! , który niechybnie się pojawia jeżeli zastosuję tylko wyszukaj.pionowo mam zera. I to już w zasadzie koniec w EXCEL, różnicę obliczam i mam spłaty. 


A przy pomocy SQL? 

By nie było łatwo tabelka ROZLICZENIA ma trzy stany. Marcin, w pierwszej kolejności jednak kwestia samozłączenia. Po prostu chodzi o to, iż można złączenia napisać pracując cały czas na jednej tabeli (jak w tym przykładzie) i wykorzystać trik z aliasami. Innymi słowy nadać danej i tej samej tabeli jeden alias, następnie tej samej tabeli drugi alias. W ten sposób sztucznie widzisz jakby dwie tabele i już, masz samozłączenie :-) 

W przykładowym zadaniu masz jednak trzy stany, musisz zapisać które stany Ciebie interesują.  Haczyk polega na tym, iż samozłączenie wyjdzie Ci jako „wewnętrzne”, w odpowiedzi na Twoje zapytanie dostaniesz tylko te wiersze, dla których nastąpiło złączenie. Marcinie, a Ty wiesz, iż w stanie końca roku 2012 nie ma rozliczonych umów, w EXCELU musiałeś to sprytnie ominąć. Samozłączenie gubi rozliczone umowy :-( Nieważne jak będziesz plusikami próbował dociągnąć, czy też zastosujesz notację z JOIN.

Co z tym zrobić? Spróbuj sam Marcinie :-) a jak już się zmęczysz (liczę, iż spróbujesz jednak sam) zajrzyj do opublikowanego rozwiązania.


Materiały:

Brak komentarzy:

Prześlij komentarz