Zapytanie do 3 tabel z warunkiem

0

Witam,

Mam 3 tabele

  1. dokument_finansowy (data, nr, typ_platnika, nr_platnika, kwota, tytulem)
  2. kontrahent (id_kontrahenta, nazwa)
  3. pracownik (id_pracownika, nazwisko, imie)
    pierwsza łączy się z drugą i trzecią: jeżeli typ_platnika = 'k' to nr_platnika = id_kontrahenta natomiast jeżeli typ_platnika = 'p' to nr_platnika = id_pracownika

tabela wynikowa ma zawierać (data, nr, (nazwa lub nazwisko + imie) kwota, tytulem

kombinowałem na różne sposoby ale bez pomocy chyba nie dam rady.

Pozdrawiam
wujek

0

Pokaż jak próbowałeś.

0

Jak próbowałem nie istotne bo nie dało rezultatów, generalnie nie wiem czy zapytanie wymaga łączenia tych trzech tabel czy też nie a jeśli tak to w jaki sposób. Pewnie można też to zrobić na kilka sposobów chętnie usłyszałbym jaki jest najbardziej optymalny/zalecany. Nie oczekuję że ktoś da rozwiązanie na tacy, wystarczy wskazówka w jaki sposób należy to zrobić.

Pozdrawiam
wujek

0

jak sie ma tak zorganizowane dane to trzeba kombinować, sposobów jest kilka:

#1

Select
	nazwa
	,data
	,nr
	,typ_platnika
	,nr_platnika
	,kwota
	,tytulem
from
	dokument_finansowy as df
	inner join kontrahent k on k.id_kontrhenta=df.nr_platnika and df.typ_platnika = 'k'
union all
Select
	imie + ' ' + nazwisko nazwa
	,data
	,nr
	,typ_platnika
	,nr_platnika
	,kwota
	,tytulem
from
	dokument_finansowy as df
	inner join pracownik p on p.id_pracownika=df.nr_platnika and df.typ_platnika = 'p'

#2

Select
	nazwa
	,data
	,nr
	,typ_platnika
	,nr_platnika
	,kwota
	,tytulem
from
	dokument_finansowy as df
	inner join (select
					'k' as typ_platnika
					,id_kontrahenta id
					,nazwa
				from
					kontrahent
				union all
					'p'
					,id_pracownika
					,imie + ' ' +nazwisko
				from
					pracownik) k on k.id=df.nr_platnika and df.typ_platnika = k.typ_platnika

#3

Select
	case when typ_planika = 'k' then k.nazwa else p.imie + ' ' + nazwisko end nazwa
	,data
	,nr
	,typ_platnika
	,nr_platnika
	,kwota
	,tytulem
from
	dokument_finansowy as df
	left join kontrahent on k.id_kontrahenta=df.nr_platnika and df.typ_platnika = 'k'
	left join pracownik p on p.id_pracownika=df.nr_platnika and df.typ_platnika = 'p'

Ja bym szedł w 3 rozwiązanie

0

Ja próbowałem coś takiego:
SELECT
dokument_finansowy.data as data,
dokument_finansowy.numer as numer,
(CASE WHEN dokument_finansowy.typ_platnika = 'k' THEN kontrahent.nazwa ELSE CONCAT (pracownik.nazwisko,' ', pracownik.imie) END) as kontrahent ,
dokument_finansowy.kwota as kwota,
dokument_finansowy.tytulem as opis
FROM dokument_finansowy

tylko nie wiem jak połączyć tabele.

0

W 3 rozwiązaniu masz sposób w jaki to połączyć

0

No i zadziałało, brakowało mi sposobu na połączenie tych tabel. Wielkie dzięki i wiszę Ci duże piwo !!!

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