Dodanie wyników z kolejnej tabeli

0

Witam, jak dodać do gotowego zapytania dodatkowe dane z dwóch kolumn z innej tabeli, które będą pasowany do uzyskanych wcześniej wyników ?

SELECT DOK.DOKUMENT, DOK.NAZWA, DOK.ARTYKUL, DOK.KARTONY, DOK.DATA, DOK.GODZ, DOK.OBIEG, DOK.RECEPCJA, DOK.PALETA, DOK.MIEJSCE_REC, ZATW.KART_DO_ZATW, DOK.DATLIV
FROM (SELECT GEVTLE1.NUMVTL AS DOKUMENT, GEVTLE1.LIBVTL AS NAZWA, GEVTLP.CODPRO AS ARTYKUL, GEVTLE1.CUMPRT AS KARTONY, GEVTLE1.DATVTL1 AS DATA, GEVTLE1.HEUVTL1 AS GODZ, 
GEVTLP.CIRPIC AS OBIEG, GEVTLP.REFREC AS RECEPCJA, GEVTLP.CODPAL AS PALETA, GEZKAI.LIBKAI AS MIEJSCE_REC, GEVTLE1.CODACT, GEVTLP.NUMRPT, PAL.DATLIV
FROM <BIBLIOTEKA>.GEVTLE1 GEVTLE1 
INNER JOIN <BIBLIOTEKA>.GEVTLP GEVTLP
ON GEVTLP.NUMVTL = GEVTLE1.NUMVTL AND GEVTLE1.CODACT = GEVTLP.CODACT
LEFT JOIN
(SELECT DISTINCT D.NUMRPT, D.CODPAL, MIN(E.DATLIV) AS DATLIV
FROM <BIBLIOTEKA>.GESUPD D 
INNER JOIN <BIBLIOTEKA>.GESUPE E
ON D.NUMSUP = E.NUMSUP AND D.SNUSUP = E.SNUSUP
GROUP BY D.NUMRPT, D.CODPAL) AS PAL
ON GEVTLP.CODPAL=PAL.CODPAL AND GEVTLP.NUMRPT=PAL.NUMRPT
LEFT JOIN <BIBLIOTEKA>.GERECE GERECE
ON GEVTLP.NUMREC=GERECE.NUMREC
LEFT JOIN <BIBLIOTEKA>.GEZKAI GEZKAI
ON GERECE.KAIREC=GEZKAI.CODKAI
WHERE ((GEVTLE1.ETAVTL='30')) AND GEVTLE1.TYPVTL='2'
ORDER BY GEVTLE1.NUMVTL) AS DOK
LEFT JOIN 
(SELECT GESUPDN.CODACT, GESUPDN.CODPAL, GESUPDN.CODPRO, GESUPDN.NUMRPT, GESUPDN.CNFLIG, FLOOR(SUM(GESUPDN.UVCLIV/GESUPDN.PCBPRO)) AS KART_DO_ZATW
FROM <BIBLIOTEKA>.GESUPDN GESUPDN
WHERE GESUPDN.CNFLIG='' AND GESUPDN.NUMLIV<>'0'
GROUP BY GESUPDN.CODACT, GESUPDN.CODPAL, GESUPDN.CODPRO, GESUPDN.NUMRPT, GESUPDN.CNFLIG) AS ZATW
ON DOK.CODACT=ZATW.CODACT AND DOK.PALETA=ZATW.CODPAL AND DOK.NUMRPT=ZATW.NUMRPT
ORDER BY DOK.DOKUMENT

Dodatkowa tabela, z której chciałbym "wydobyć" wspólne dane dla wierszy wynikowych z kolumn (GERECE.NOMFOU, GERECE.KAIREC). Dodam, że biblioteka GERECE jest już raz uwzględniona w pierwszym zapytaniu jeśli to pomoże.

GERECE.NOMFOU,
GERECE.KAIREC
<BIBLIOTEKA>.GERECE GERECE
wspólne założenia
GEVTLP.NUMREC=GERECE.NUMREC
GEVTLP.REFREC=GERECE.REFREC
1

Jeśli przez RECE.NOMFOU, RECE.KAIREC masz na myśli GERECE.NOMFOU, GERECE.KAIREC, to dodaj to do pierwszego SELECT. Chociaż czytam twoje pytanie 4 raz i nie jestem pewny co ty w ogóle chcesz

1

SELECT kolumny_z_pierwszego_zapytania FROM (CAŁE_PIERWSZE ZAPYTANIE) x
JOIN / LEFT JOIN / INNY JOIN kolejna_tabela ON warunki_złączenia

To jest NAJPROSTSZE co możesz zrobić. Trudniejsze to ogarnąć Twoje "aktualne" zapytanie (ale jest tak napisane, że mi się po prostu nie chce) i dodać tą tabelę tam

PS ORDER BY musi wylecieć na koniec CAŁEGO zapytania

0

Wklejasz SQL jako sciane tekstu, to nie pomoaga, dużo czytelniej byłoby to sformatować,
Wtedy łatwiej pomóc.

Skoro masz juz złączenie z tabelą gerece to wystarczy dopisać kolumny w select:

SELECT 
  DOK.DOKUMENT, 
  DOK.NAZWA, 
  DOK.ARTYKUL, 
  DOK.KARTONY, 
  DOK.DATA, 
  DOK.GODZ, 
  DOK.OBIEG, 
  DOK.RECEPCJA, 
  DOK.PALETA, 
  DOK.MIEJSCE_REC, 
  ZATW.KART_DO_ZATW, 
  DOK.DATLIV,
  GERECE.NOMFOU,
  GERECE.KAIREC
FROM 
  (
    SELECT 
      GEVTLE1.NUMVTL AS DOKUMENT, 
      GEVTLE1.LIBVTL AS NAZWA, 
      GEVTLP.CODPRO AS ARTYKUL, 
      GEVTLE1.CUMPRT AS KARTONY, 
      GEVTLE1.DATVTL1 AS DATA, 
      GEVTLE1.HEUVTL1 AS GODZ, 
      GEVTLP.CIRPIC AS OBIEG, 
      GEVTLP.REFREC AS RECEPCJA, 
      GEVTLP.CODPAL AS PALETA, 
      GEZKAI.LIBKAI AS MIEJSCE_REC, 
      GEVTLE1.CODACT, 
      GEVTLP.NUMRPT, 
      PAL.DATLIV,
	  GERECE.NOMFOU,
	  GERECE.KAIREC
    FROM 
      < BIBLIOTEKA >.GEVTLE1 GEVTLE1 
      INNER JOIN < BIBLIOTEKA >.GEVTLP GEVTLP ON GEVTLP.NUMVTL = GEVTLE1.NUMVTL 
      AND GEVTLE1.CODACT = GEVTLP.CODACT 
      LEFT JOIN (
        SELECT 
          DISTINCT D.NUMRPT, 
          D.CODPAL, 
          MIN(E.DATLIV) AS DATLIV 
        FROM 
          < BIBLIOTEKA >.GESUPD D 
          INNER JOIN < BIBLIOTEKA >.GESUPE E ON D.NUMSUP = E.NUMSUP 
          AND D.SNUSUP = E.SNUSUP 
        GROUP BY 
          D.NUMRPT, 
          D.CODPAL
      ) AS PAL ON GEVTLP.CODPAL = PAL.CODPAL 
      AND GEVTLP.NUMRPT = PAL.NUMRPT 
      LEFT JOIN < BIBLIOTEKA >.GERECE GERECE ON GEVTLP.NUMREC = GERECE.NUMREC 
      LEFT JOIN < BIBLIOTEKA >.GEZKAI GEZKAI ON GERECE.KAIREC = GEZKAI.CODKAI 
    WHERE 
      (
        (GEVTLE1.ETAVTL = '30')
      ) 
      AND GEVTLE1.TYPVTL = '2' 
  ) AS DOK 
  LEFT JOIN (
    SELECT 
      GESUPDN.CODACT, 
      GESUPDN.CODPAL, 
      GESUPDN.CODPRO, 
      GESUPDN.NUMRPT, 
      GESUPDN.CNFLIG, 
      FLOOR(
        SUM(GESUPDN.UVCLIV / GESUPDN.PCBPRO)
      ) AS KART_DO_ZATW 
    FROM 
      < BIBLIOTEKA >.GESUPDN GESUPDN 
    WHERE 
      GESUPDN.CNFLIG = '' 
      AND GESUPDN.NUMLIV <> '0' 
    GROUP BY 
      GESUPDN.CODACT, 
      GESUPDN.CODPAL, 
      GESUPDN.CODPRO, 
      GESUPDN.NUMRPT, 
      GESUPDN.CNFLIG
  ) AS ZATW ON DOK.CODACT = ZATW.CODACT 
  AND DOK.PALETA = ZATW.CODPAL 
  AND DOK.NUMRPT = ZATW.NUMRPT 
ORDER BY 
  DOK.DOKUMENT


Nie wiem tylko dlaczego w poście piszesz że warunek złączenia to GEVTLP.NUMREC=GERECE.NUMREC AND GEVTLP.REFREC=GERECE.REFREC natomiast w przedstawionym zapytaniu masz tylko ON GEVTLP.NUMREC = GERECE.NUMREC

0

ok, dzięki za pomoc, mam jeszcze pytanie, bo chciałem dodać linijkI w zapytaniu (wiersze 16 i 33), gdzie zwraca mi trzy cyfrowy numer, ale czasami są puste komórki, więc chciałem, aby zamiast pustego miejsca pojawił się "TEKST", jednak coś nie do końca mi wyszło, bo jak dodam:

CASE WHEN GERECE.KAIREC IS NULL THEN 'TEKST' ELSE GERECE.KAIREC END AS RAMPA

lub:

CASE WHEN GERECE.KAIREC '' THEN 'TEKST' ELSE GERECE.KAIREC END AS RAMPA

to nic się nie zmienia i nadal mam puste komórki w tych miejscach, a jak wstawię w ten sposób:

CASE WHEN GERECE.KAIREC IS NULL THEN 'TEKST' ELSE '' END AS RAMPA

to wtedy wstawia "TEKST" w te puste komórki, ale cała reszta, gdzie wcześniej były numery są teraz puste.
Jak to pogodzić ?

SELECT 
  DOK.DOKUMENT, 
  DOK.NAZWA, 
  DOK.ARTYKUL, 
  DOK.KARTONY, 
  DOK.DATA, 
  DOK.GODZ, 
  DOK.OBIEG, 
  DOK.RECEPCJA, 
  DOK.PALETA, 
  DOK.MIEJSCE_REC, 
  ZATW.KART_DO_ZATW, 
  DOK.DATLIV,
  GERECE.NOMFOU,
  GERECE.KAIREC,
  DOK.RAMPA
FROM 
  (
    SELECT 
      GEVTLE1.NUMVTL AS DOKUMENT, 
      GEVTLE1.LIBVTL AS NAZWA, 
      GEVTLP.CODPRO AS ARTYKUL, 
      GEVTLE1.CUMPRT AS KARTONY, 
      GEVTLE1.DATVTL1 AS DATA, 
      GEVTLE1.HEUVTL1 AS GODZ, 
      GEVTLP.CIRPIC AS OBIEG, 
      GEVTLP.REFREC AS RECEPCJA, 
      GEVTLP.CODPAL AS PALETA, 
      GEZKAI.LIBKAI AS MIEJSCE_REC, 
      GEVTLE1.CODACT, 
      GEVTLP.NUMRPT, 
      PAL.DATLIV,
      CASE WHEN GERECE.KAIREC IS NULL THEN 'TEKST' ELSE GERECE.KAIREC END AS RAMPA
    FROM 
      < BIBLIOTEKA >.GEVTLE1 GEVTLE1 
      INNER JOIN < BIBLIOTEKA >.GEVTLP GEVTLP ON GEVTLP.NUMVTL = GEVTLE1.NUMVTL 
      AND GEVTLE1.CODACT = GEVTLP.CODACT 
      LEFT JOIN (
        SELECT 
          DISTINCT D.NUMRPT, 
          D.CODPAL, 
          MIN(E.DATLIV) AS DATLIV 
        FROM 
          < BIBLIOTEKA >.GESUPD D 
          INNER JOIN < BIBLIOTEKA >.GESUPE E ON D.NUMSUP = E.NUMSUP 
          AND D.SNUSUP = E.SNUSUP 
        GROUP BY 
          D.NUMRPT, 
          D.CODPAL
      ) AS PAL ON GEVTLP.CODPAL = PAL.CODPAL 
      AND GEVTLP.NUMRPT = PAL.NUMRPT 
      LEFT JOIN < BIBLIOTEKA >.GERECE GERECE ON GEVTLP.NUMREC = GERECE.NUMREC 
      LEFT JOIN < BIBLIOTEKA >.GEZKAI GEZKAI ON GERECE.KAIREC = GEZKAI.CODKAI 
    WHERE 
      (
        (GEVTLE1.ETAVTL = '30')
      ) 
      AND GEVTLE1.TYPVTL = '2' 
  ) AS DOK 
  LEFT JOIN (
    SELECT 
      GESUPDN.CODACT, 
      GESUPDN.CODPAL, 
      GESUPDN.CODPRO, 
      GESUPDN.NUMRPT, 
      GESUPDN.CNFLIG, 
      FLOOR(
        SUM(GESUPDN.UVCLIV / GESUPDN.PCBPRO)
      ) AS KART_DO_ZATW 
    FROM 
      < BIBLIOTEKA >.GESUPDN GESUPDN 
    WHERE 
      GESUPDN.CNFLIG = '' 
      AND GESUPDN.NUMLIV <> '0' 
    GROUP BY 
      GESUPDN.CODACT, 
      GESUPDN.CODPAL, 
      GESUPDN.CODPRO, 
      GESUPDN.NUMRPT, 
      GESUPDN.CNFLIG
  ) AS ZATW ON DOK.CODACT = ZATW.CODACT 
  AND DOK.PALETA = ZATW.CODPAL 
  AND DOK.NUMRPT = ZATW.NUMRPT 
ORDER BY 
  DOK.DOKUMENT

1

lisku,
W świecie baz danych mamy różne silniki bazodanowe i w każdym z nich poszczególne problemy rozwiązuje się w różny sposób. Określ się (a na przyszłość od razu taguj posta), z czego korzystasz - mysql, postgres, ms sql, oracle, czy co tam masz pod maską.

Twoje zmagania z "pustymi komórkami" wydają się być mało prawdopodobne (bo w pierwszym i trzecim przykładzie ten sam warunek działa odwrotnie).
Nie mam pewności, co masz na myśli, gdy piszesz, że komórki są puste. Czy nie mają wartości (NULL), czy zawierają pusty ciąg znaków (''). A może masz obydwa przypadki w bazie, a nie widzisz między nimi różnicy?

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