T-SQL aktualizacja danych w kalendarzu

0

Tabela_1:
[table][tr][td]Activity_Name[/td][td]Jan[/td][td]Feb[/td][td]Mar[/td][td]Apr[/td][td]Mai[/td][td]Jun[/td][td]Jul[/td][td]Aug[/td][td]Sep[/td][td]Oct[/td][td]Nov[/td][td]Dec[/td][/tr][tr][td]Act_1[/td][td]2023-01-11[/td][td]2023-02-11[/td][td]2023-03-11[/td][td]2023-04-11[/td][td]2023-05-11[/td][td]2023-06-11[/td][td]2023-07-11[/td][td]2023-08-11[/td][td]2023-09-11[/td][td]2023-10-11[/td][td]2023-11-11[/td][td]2023-12-11[/td][/tr][tr][td]Act_2[/td][td]2023-01-08[/td][td]2023-02-08[/td][td]2023-03-08[/td][td]2023-04-08[/td][td]2023-05-08[/td][td]2023-06-08[/td][td]2023-07-08[/td][td]2023-08-08[/td][td]2023-09-08[/td][td]2023-10-08[/td][td]2023-11-08[/td][td]2023-12-08[/td][/tr][tr][td]Act_3[/td][td]2023-01-07[/td][td]2023-02-07[/td][td]2023-03-07[/td][td]2023-04-07[/td][td]2023-05-07[/td][td]2023-06-07[/td][td]2023-07-07[/td][td]2023-08-07[/td][td]2023-09-07[/td][td]2023-10-07[/td][td]2023-11-07[/td][td]2023-12-07[/td][/tr][tr][td]Act_4[/td][td]2023-01-07[/td][td]2023-02-07[/td][td]2023-03-07[/td][td]2023-04-07[/td][td]2023-05-07[/td][td]2023-06-07[/td][td]2023-07-07[/td][td]2023-08-07[/td][td]2023-09-07[/td][td]2023-10-07[/td][td]2023-11-07[/td][td]2023-12-07[/td][/tr][tr][td]Act_5[/td][td]2023-01-04[/td][td]2023-02-04[/td][td]2023-03-04[/td][td]2023-04-04[/td][td]2023-05-04[/td][td]2023-06-04[/td][td]2023-07-04[/td][td]2023-08-04[/td][td]2023-09-04[/td][td]2023-10-04[/td][td]2023-11-04[/td][td]2023-12-04[/td][/tr][tr][td]Act_6 [/td][td]2023-01-03[/td][td]2023-02-03[/td][td]2023-03-03[/td][td]2023-04-03[/td][td]2023-05-03[/td][td]2023-06-03[/td][td]2023-07-03[/td][td]2023-08-03[/td][td]2023-09-03[/td][td]2023-10-03[/td][td]2023-11-03[/td][td]2023-12-03[/td][/tr][/table]

Tabela_2 (1 oznacza dzień roboczy, 2 dzień wolny od pracy):
[table][tr][td]FromDate[/td][td]day type[/td][/tr][tr][td]2023-01-02[/td][td]1[/td][/tr][tr][td]2023-01-03[/td][td]1[/td][/tr][tr][td]2023-01-04[/td][td]1[/td][/tr][tr][td]2023-01-05[/td][td]1[/td][/tr][tr][td]2023-01-06[/td][td]2[/td][/tr][tr][td]2023-01-07[/td][td]2[/td][/tr][tr][td]2023-01-08[/td][td]2[/td][/tr][tr][td]2023-01-09[/td][td]1[/td][/tr][tr][td]2023-01-10[/td][td]1[/td][/tr][tr][td]2023-01-11[/td][td]1[/td][/tr][tr][td]2023-01-12[/td][td]1[/td][/tr][tr][td]2023-01-13[/td][td]1[/td][/tr][tr][td]2023-01-14[/td][td]2[/td][/tr][tr][td]2023-01-15[/td][td]2[/td][/tr][tr][td]2023-01-16[/td][td]1[/td][/tr][tr][td]2023-01-17[/td][td]1[/td][/tr][tr][td]2023-01-18[/td][td]1[/td][/tr][tr][td]2023-01-19[/td][td]1[/td][/tr][tr][td]2023-01-20[/td][td]1[/td][/tr][tr][td]2023-01-21[/td][td]2[/td][/tr][tr][td]2023-01-22[/td][td]2[/td][/tr][tr][td]2023-01-23[/td][td]1[/td][/tr][tr][td]2023-01-24[/td][td]1[/td][/tr][tr][td]2023-01-25[/td][td]1[/td][/tr][tr][td]2023-01-26[/td][td]1[/td][/tr][tr][td]2023-01-27[/td][td]1[/td][/tr][tr][td]2023-01-28[/td][td]2[/td][/tr][tr][td]2023-01-29[/td][td]2[/td][/tr][tr][td]2023-01-30[/td][td]1[/td][/tr][tr][td]2023-01-31[/td][td]1[/td][/tr][tr][td]2023-02-01[/td][td]1[/td][/tr][tr][td]2023-02-02[/td][td]1[/td][/tr][tr][td]2023-02-03[/td][td]1[/td][/tr][tr][td]2023-02-04[/td][td]2[/td][/tr][tr][td]2023-02-05[/td][td]2[/td][/tr][tr][td]2023-02-06[/td][td]1[/td][/tr][tr][td]2023-02-07[/td][td]1[/td][/tr][tr][td]2023-02-08[/td][td]1[/td][/tr][tr][td]2023-02-09[/td][td]1[/td][/tr][tr][td]2023-02-10[/td][td]1[/td][/tr][tr][td]2023-02-11[/td][td]2[/td][/tr][tr][td]2023-02-12[/td][td]2[/td][/tr][tr][td]2023-02-13[/td][td]1[/td][/tr][tr][td]2023-02-14[/td][td]1[/td][/tr][tr][td]2023-02-15[/td][td]1[/td][/tr][tr][td]2023-02-16[/td][td]1[/td][/tr][tr][td]2023-02-17[/td][td]1[/td][/tr][tr][td]2023-02-18[/td][td]2[/td][/tr][tr][td]2023-02-19[/td][td]2[/td][/tr][tr][td]2023-02-20[/td][td]1[/td][/tr][tr][td]2023-02-21[/td][td]1[/td][/tr][tr][td]2023-02-22[/td][td]1[/td][/tr][tr][td]2023-02-23[/td][td]1[/td][/tr][tr][td]2023-02-24[/td][td]1[/td][/tr][tr][td]2023-02-25[/td][td]2[/td][/tr][tr][td]2023-02-26[/td][td]2[/td][/tr][tr][td]2023-02-27[/td][td]1[/td][/tr][tr][td]2023-02-28[/td][td]1[/td][/tr][/table]

...

Witam,
Od kilku dni męczę się z napisaniem pewnej procedury w T-SQL. Chciałbym zaktualizować dane w Tabela_1, w kolumnie Jan powinno sprawdzić korzystając z danych w Tabela_2 czy pierwszy rekord jest dniem roboczym, jeśli tak to przechodzi do następnego rekordu, jeśli nie to odejmuje 1 dzień od daty z komórki i sprawdza ponownie, jeśli nadal data nie jest dniem roboczym to ponownie odejmuje 1 dzień itd. Gdy data będzie dniem roboczym to po przejściu do następnego rekordu najpierw odejmuje liczbę dni jaką trzeba było odjąć od pierwszej daty a następnie wykonuje się ta procedura co wcześniej ze sprawdzaniem czy nowo powstała data jest dniem roboczym, po przejściu do kolejnego rekordu odejmuje liczbę odjętych dni z pierwszego + drugiego rekordu (jeśli trzeba było coś dodatkowo odjąć) itd. Gdy kolumna Jan zostanie sprawdzona to zmienna pamiętająca liczbę dni do odjęcia się zeruje i te same procedury przechodzą do kolumny Feb itd. Przykład: w kolumnie Jan w pierwszym rekordzie zostaje data 2023-01-11, w drugim rekordzie 2023-01-08 jest dniem wolnym od pracy więc data zostaje zmieniona na 2023-01-05, w trzecim rekordzie na start od daty 2023-01-07 odejmujemy 3 dni bo tyle trzeba było odjąć w poprzednim rekordzie, 2023-01-04 jest dniem roboczym więc idziemy dalej, w czwartym rekordzie 2023-01-07 staje się 2023-01-04 tak jak poprzedni, w piątym rekordzie 2023-01-04 staje się 2023-01-01 co jest dniem wolnym od pracy więc odejmujemy dni by była datą roboczą i powstaje 2023-12-30, w ostatnim rekordzie jest 2023-01-03, odejmujemy od tej daty 5 dni i powstaje 2022-12-29. To zapytanie nie może posiadać wirtualnych tabel

1
morking napisał(a):

Tabela_1:

Mam wrażenie, że coś tutaj masz lekko przekombinowane.

Czemu w tabeli 1 nie możesz od razu wrzucić prawidłowej daty, tylko ja, aktualizować? Nie znam szczegółów, więc wydaje mi się że nie ma to sensu. Temat masz w wątku VBA, jeśli te dane są z excela lub accessa to możesz walidacja daty zrobić wcześniej, przed wysłaniem do tabeli

Dlaczego kolumna nazywa się Jan? Czy kolejne miesiące to kolejne kolumny? Zgodnie ze sztuką to kolumna powinna mieć nazwę 'Data' a Jan to już funkcja Month z daty

Gdybyś mógł nieco czytelniej opisać same nazwy kolumn w tabelach (mnie osobiście ciężko jest to czytać)

0
TytusRomek napisał(a):
morking napisał(a):

Tabela_1:

Mam wrażenie, że coś tutaj masz lekko przekombinowane.

Wcale nie lekko.

Kolega przeniósł do bazy 1:1 z excela, bez grama refleksji albo bez najmniejszego zainteresowania jak bazy się robi ma robic

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