klauzula WITH

0

Witam wszystkich forumowiczów. Proszę o pomoc w skonstruowaniu zapytania do poniższych przykładowych danych wejściowych.

select t1.TrN_TypDokumentu as 'Typ_t1'
, t1.TrN_TrNID as 'ID_t1'
, case t1.TrN_TypDokumentu
when 307 then 0
when 318 then t1.TrN_FaId
when 317 then 0 end as 'Ref_t1'
, t2.TrE_TrEID as 'ID_el_t2'
, t3.TrS_TrSID as 'ID_sub_t3'
, t3.TrS_TrSIdDost as 'ID_sub_poprzednika_t3'
from CDN.TraNag as t1 join CDN.TraElem as t2 on t1.TrN_TrNID = t2.TrE_TrNId
join CDN.TraSElem as t3 on t2.TrE_TrEID = t3.TrS_TrEId
where t1.TrN_TypDokumentu in (307, 317, 318) and YEAR(t1.TrN_DataDok) = 2016
order by t1.TrN_TrNID desc

Typ_ t1 ID_t1 Ref_t1 ID_el_t2 ID_sub_t3 ID_sub_poprzednika_t3
318 4250 4249 4833 4656 3670
318 4250 4249 4834 4657 4655
317 4249 0 4832 4658 4658
318 4248 4247 4831 4654 4653
317 4247 0 4830 4655 4655
318 4246 4245 4829 4652 4651
317 4245 0 4828 4653 4653
318 4244 4243 4826 4649 3669
318 4244 4243 4827 4650 4648
317 4243 0 4825 4651 4651
318 4242 4241 4823 4646 3667
318 4242 4241 4824 4647 3668
317 4241 0 4822 4648 4648
307 4239 0 4820 3670 3670
307 4236 0 4818 3669 3669
307 4233 0 4814 3667 3667
307 4233 0 4815 3668 3668

Zapytanie lub inna konstrukcja powinno(a) zwrócić kolumnę z ID_t1 lub całe rekordy biorące udział w procesie opisanym poniżej.
Na początku dostaję ID_t1 = 4250, teraz zapytanie powinno sprawdzić ID_sub_poprzednika_t3. Dostaję 2 różne 3670 i 4655. Dla każdego z osobna dalsze postępowanie powinno być następujące. ID_sub_poprzednika_t3 odnajduję w ID_sub_t3, sprawdzam jaki ma typ_t1, jeśli 307 to kończę w tym miejscu tak jest dla 3670, jeśli jest 317 (dla 4655) to biorę jego id_t1 czyli 4247 i odszukuje je w Ref_t1. Dla Ref_t1 = 4247 ID_t1 = 4248 i tutaj zaczynam ponownie cały przebieg. Odnajduję ID_sub_poprzednika_t3 dla tego ID_t1, odnajduję równe ID_sub_t3, sprawdzam jaki jest typ_t1 dla tego ID_sub_t3, jeśli 307 to kończę, jeśli jest 317 to biorę jego id_t1 i odszukuje je w Ref_t1 itd.. Nie wiem czy dość jasno to przedstawiłem. Próbowałem rekurencji ale ciągle otrzymywałem komunikat o przekroczeniu dozwolonej liczbie rekursji,
próbowałem kursorów z tablicami tymczasowymi, różnie kombinowałem. Jedyne co osiągnąłem to zejście jeden poziom niżej. A zapytanie czy inna forma powinna być uniwersalna dla każdego ID_t1 o typie typ_t1 = 318.

0

Napisz skrypty tworzące przykładowe dane.

0

Jako takiego skryptu tworzącego dane nie podam, ponieważ problem pochodzi z bazy erpa comarchowego - Optimy.
W zapytaniu na początku, są podane tabele i kolumny które mnie interesują z wartościami które są liczbami (id).
Tabela t1 to nagłówek dokumentu, tabela t2 elementy dokumentu np towary na rozchodzie wewnętrznym,
t3 to tabela ze szczegółami elementów. Te konkretne dane odzwierciedlają jeden z możliwych scenariuszy
dokumentowania produkcji w tym erpie:

poziom 1 - przyjęcia towarów prostych
twr1, twr2 -> PZ1 (PZ to typ_t1 = 307)
twr3 -> PZ2
twr4 -> PZ3

poziom 2 - tworzenie towarów złożonych (produkcja1)
twr1 + twr2 = p1 -> PWP1 (PWP to typ_t1=317) i RWS1 (RWS to typ_t1=317)
twr3 + p1 = p2 -> PWP2 i RWS2
p2 = p3 -> PWP3 i RWS3
p3 = p4 -> PWP4 i RWS4

poziom 3 - tworzenie towarów złożonych poziomu2 (produkcja2)
twr4 + p4 = twr5 -> PWP5 i RWS5

W załączniku spakowane są pary create table i csv z danymi do każdej tabeli.

0
viehoo napisał(a):

W załączniku spakowane są pary create table i csv z danymi do każdej tabeli.

a teraz weź nowąbaze i puść na niej te skrypty...

0

Racja, mój błąd. Teraz całą baza do pobrania.

0

Nieaktualne, poradziłem sobie.Dzięki za wsparcie.

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