Zadanie w ms sql serwer - bardzo prosze o pomoc

0

Mam tabelę wizyty:
screenshot-20170821192101.png

Muszę do niej dołączyć (po nr pesel) kolumnę z tabel Skierowania. Problem w tym, że jest kilka tabel skierowania, zależne są od dat.
screenshot-20170821192407.png

Każda z nich wygląda tak:
screenshot-20170821192305.png

Kolejne tabele wyglądają analogicznie.

Należy dopisać lekarza, z tabeli Skierowania, po połączeniu z najwcześniejszą datą skierowania (wcześniejszą niż wizyta)
np.. Dla daty 02.02.2017, specjalność lekarza z tabeli Skierowania_03.02.2017
dla daty 12.01.2017, specjalność lekarza z tabeli "Skierowania_20.01.2017"

Podobno można użyć cursora/pętli.
Ale jak?

Bardzo proszę o pomoc.

0

Najlepiej zacząć od "pseudo-normalizacji" tego badziewia.
Np. tak:

CREATE VIEW v_skierowania as
SELECT '2017-01-10' as Data, Pesel, imie, nazwisko, data_skierowania as data_wizyty, lekarz FROM Skierowania_10.01.2017
UNION
SELECT '2017-01-20' as Data, Pesel, imie, nazwisko, data_skierowania, lekarz FROM Skierowania_20.01.2017
UNION
...

A potem to już z górki... ŁĄczysz to z tabelę wizyty po PESEL i data_wizyty

0

Super, dzięki za wskazówkę!

0

A co w przypadku jeżeli danych jest dużo więcej? Tzn. tabela wizyty zawiera setki rekordów, a tabel skierowania jest 50.
Możecie polecić jakiś inny sposób?

2

Możecie polecić jakiś inny sposób?

inny sposób to przebudowanie bazy i założenie tabel pacjenci, lekarze, skierowania, przychodnie, refundacja, wizyty ...czyli normalizacja
przy tej postaci bazy jak podałaś to nie zajedziesz daleko

a na początek radził bym wrzucić wszystkie skierowania do jednej tabeli z dodatkowym polem "DataSkierowania" i Twój problem jest rozwiązany

0

Niestety nie mogę przebudować bazy, musi ona pozostać w takiej postaci. Korzystają z niej inni. Ale dziękuję!

0

Baza jest zaprojektowana TRAGICZNIE. Jest redundantna i w ogóle ma jakąś chorą strukturę. To prędzej, czy później szlag trafi. U Ciebie już właśnie trafił. A to tylko wierzchołek góry lodowej. Nie dziwię się, że przychodniach jest taki burdel ;)

Najlepszym rozwiązaniem jest przebudowanie bazy, bo na tej naprawdę daleko nikt nie zajedzie. Czyli tak jak mówili poprzednicy. Jeśli nie możesz tego zrobić, to utworzenie widoku tak jak mówił Marcin.Miga. Tutaj jednak dodałbym jeszcze nazwę tabeli, z której pochodzą skierowania. Oczywiście to też nie jest rozwiązanie. Bo podejrzewam, że cały czas są tworzone tabele ze skierowaniami, więc cały czas musisz dbać o aktualizację tego widoku.

0
Inka Rozmowna napisał(a):

A co w przypadku jeżeli danych jest dużo więcej? Tzn. tabela wizyty zawiera setki rekordów, a tabel skierowania jest 50.
Możecie polecić jakiś inny sposób?

W takim wypadku wyciągasz sobie z sys.tables wszystkie tabele skierowań i budujesz dynamic SQL zapytanie.

https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql

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