• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed SQL sumujący 3 tabele

+2 głosów
117 wizyt
pytanie zadane 29 czerwca 2018 w SQL, bazy danych przez hiper007 Stary wyjadacz (10,880 p.)
zamknięte 3 lipca 2018 przez hiper007

Witam!

 

Posiadam trzy tabele:

pierwsza: palety

id pal_wym palety_nwm nr_naczepy nr_boczny
1 10 2 pw111 123
2 3 5 pw111 123
3 6 12 pa232 221
4 2 5 pa232 221

 

druga transportery

id l_transporter t_transportery nr_naczepy nr_boczny
1 3 9 pw111 123
2 1 4 pw111 123
3 5 7 pa232 221
4 3 2 pa232 221

trzecia skrzynki:

id skrzynka_p1 skrzynka_p2 nr_naczepy nr_boczny
1 2 10 pw111 123
2 55 3 pw111 123
3 6 7 pa232 221
4 2 7 pa232 221

Chciałbym stworzyc sqla,który będzie zbierał dane z  wszystkich trzech tabel i sumował ilości palet,transporterów,skrzynek według "nr_naczepy" i "nr_boczny" w postaci:

Zeby wynik wyglądał następująco;

pal_wym pal_nwm l_transporter t_transporter skrzynka_p1 skrzynka_p2 nr_naczepy nr_boczny
13 7 4 13 57 13 pw111 123
7 17 8 9 8 14 pa232 221

Ma ktoś jakiś pomysł;) Z góry dzięki.

komentarz zamknięcia: Problem rozwiązany

3 odpowiedzi

+1 głos
odpowiedź 30 czerwca 2018 przez mbabane Maniak (70,020 p.)
wybrane 3 lipca 2018 przez hiper007
 
Najlepsza

Można też, zdaje się, zrobić to na zasadzie podzapytań:

SELECT
    pal.palety,
    pal.palety_1,
    trans.transportery,
    trans.transportery_1,
    skrzy.skrzynki,
    skrzy.skrzynki_1,
    pal.naczepa,
    pal.nr_boczny
FROM
    (
    SELECT
        SUM(palety.palety) AS palety,
        SUM(palety.palety_1) AS palety_1,
        palety.naczepa,
        palety.nr_boczny
    FROM
        palety
    GROUP BY
        palety.naczepa,
        palety.nr_boczny
) AS pal
JOIN(
    SELECT
        SUM(transportery.transportery) AS transportery,
        SUM(transportery.transportery_1) AS transportery_1,
        transportery.naczepa,
        transportery.nr_boczny
    FROM
        transportery
    GROUP BY
        transportery.naczepa,
        transportery.nr_boczny
) AS trans
ON
    pal.naczepa = trans.naczepa AND pal.nr_boczny = trans.nr_boczny
JOIN(
    SELECT
        SUM(skrzynki.skrzynki) AS skrzynki,
        SUM(skrzynki.skrzynki_1) AS skrzynki_1,
        skrzynki.naczepa,
        skrzynki.nr_boczny
    FROM
        skrzynki
    GROUP BY
        skrzynki.naczepa,
        skrzynki.nr_boczny
) AS skrzy
ON
    trans.naczepa = skrzy.naczepa AND trans.nr_boczny = skrzy.nr_boczny;
komentarz 1 lipca 2018 przez hiper007 Stary wyjadacz (10,880 p.)
select pal.pal_wym, pal.pal_nwm, trans.l_transporter, trans.t_transporter, skrzy.skrzynka_p1, skrzy.skrzynka_p2, pal.nr_naczepy, pal.nr_boczny
from (select sum(palety.pal_wym) as palety, sum(palety.pal_nwm) as palety_1, palety.nr_naczepy, palety.nr_boczny
          from palety
          group by palety.nr_naczepy, palety.nr_boczny
      ) as pal
      join
      (select sum(transportery.l_transporter) as transportery, sum(transportery.t_transporter) as transportery_1, transportery.nr_naczepy, transportery.nr_boczny
        from transportery
        group by transportery.nr_naczepy, transportery.nr_boczny
      ) as trans
      on pal.nr_naczepy=trans.nr_naczepy and pal.nr_boczny=trans.nr_boczny
      join
      (select sum(skrzynki.skrzynka_p1) as skrzynki, sum(skrzynki.skrzynka_p2) as skrzynki_1, skrzynki.nr_naczepy, skrzynki.nr_boczny
       from skrzynki
       group by skrzynki.nr_naczepy, skrzynki.nr_boczny
       ) as skrzy
       on trans.nr_naczepy = skrzy.nr_naczepy and trans.nr_boczny = skrzy.nr_boczny

wyskakuje błąd:

 mysql_fetch_row() expects parameter 1 to be resource, boolean given in

1
komentarz 1 lipca 2018 przez mbabane Maniak (70,020 p.)
edycja 1 lipca 2018 przez mbabane

Może jakąś literówkę zrobiłeś?

Zerknij na to:

https://forum.pasja-informatyki.pl/22779/warning-mysql_fetch_row-expects-parameter-resource-boolean-given-in-nadpisanie

 

edit:

W linii Select np. powinno być, zdaje się, pal.palety ponieważ robiony jest alias na palety (as palety), a u Ciebie jest pal.pal_wym

Sformatowałem nieco inaczej kod aby był bardziej czytelny.

komentarz 3 lipca 2018 przez hiper007 Stary wyjadacz (10,880 p.)

@mbabane,

SELECT
    pal_wym,
    pal_nwm,
	lech_transporter,
    tyskie_transporter,
    skrzynka_p1,
    skrzynka_p2,
    pal.nr_naczepy,
    pal.nr_boczny
FROM
    (
    SELECT
        sum(palety.pal_wym) AS pal_wym,
        sum(palety.pal_nwm) AS pal_nwm,
        palety.nr_naczepy,
        palety.nr_boczny
    FROM
        palety
    GROUP BY
        palety.nr_naczepy,
        palety.nr_boczny
) AS pal
JOIN(
    SELECT
        sum(transportery.lech_transporter) AS lech_transporter,
        sum(transportery.tyskie_transporter) AS tyskie_transporter,
        transportery.nr_naczepy,
        transportery.nr_boczny
    FROM
        transportery
    GROUP BY
        transportery.nr_naczepy,
        transportery.nr_boczny
) AS trans
ON
    pal.nr_naczepy = trans.nr_naczepy AND pal.nr_boczny = trans.nr_boczny
JOIN(
    SELECT
        sum(skrzynki.skrzynka_p1) AS skrzynka_p1,
        sum(skrzynki.skrzynka_p2) AS skrzynka_p2,
        skrzynki.nr_naczepy,
        skrzynki.nr_boczny
    FROM
        skrzynki
    GROUP BY
        skrzynki.nr_naczepy,
        skrzynki.nr_boczny
) AS skrzy
ON
    pal.nr_naczepy = skrzy.nr_naczepy AND pal.nr_boczny = skrzy.nr_boczny

Super działa ;) ale jest problem wszypisuje mi tylko te wartości,które występują zarówno w tabeli palety, transportery, skrzynki.

Jeżeli np. są wartości danej naczepy tylko w tabeli palety i skrzynki, a nie ma w  transporterach to nie wypisze mi tych wartości ;)

W jaki sposób mógłbym zmodyfikować ten kod ;)? Zeby pokazywał wszystko nawet jak znajdują się wartości dla danej naczepy tylko w jednej lub w dwóch tabelach (a nie we wszystkich). 

1
komentarz 3 lipca 2018 przez mbabane Maniak (70,020 p.)

Wystarczy zdaje się zamiast samego JOIN użyć LEFT JOIN

+1 głos
odpowiedź 29 czerwca 2018 przez jeremus Maniak (59,840 p.)
--- w mssql można spróbować z with gdzie sumujemy po naczepa i nr_boczny a potem łączymy przez left_join bo nie zawsze są chyba dla naczepy o danym numerze bocznym palety,transportery i skrzynki - chyba że sa to normalnym joinem
-- cos takiego

with pal as ( select naczepa,nr_boczny,sum(palety),sum(palety_1) from palety group by naczepa,numer_boczny), 
trans as ( select naczepa,nr_boczny,sum(transportery) as t1,sum(transportery_1) as t2 from transportery group by naczepa,numer_boczny),
 skrzyn as ( select naczepa,nr_boczny,sum(skrzynki) as s1,sum(skrzynki_1) as s2 from skrzynki group by naczepa,numer_boczny)
select p.*,t.t1,t.t2,s.s1.s.s2 from pal p left join trans t on p.naczepa=t.naczepa and p.nr_boczny=t.nr_boczny left join skrzyn s on p.naczepa=s.naczepa and p.nr_boczny=s.nr_boczny

 

komentarz 3 lipca 2018 przez hiper007 Stary wyjadacz (10,880 p.)
with pal as ( select nr_naczepy,nr_boczny,sum(pal_wym),sum(pal_nwm) from palety group by nr_naczepy,nr_boczny), 
trans as ( select nr_naczepy,nr_boczny,sum(lech_transporter) as t1,sum(tyskie_transporter) as t2 from transportery group by nr_naczepy,nr_boczny),
 skrzyn as ( select nr_naczepy,nr_boczny,sum(skrzynka_p1) as s1,sum(skrzynka_p2) as s2 from skrzynki group by nr_naczepy,nr_boczny)
select p.*,t.t1,t.t2,s.s1.s.s2 from pal p left join trans t on p.nr_naczepy=t.nr_naczepy and p.nr_boczny=t.nr_boczny left join skrzyn s on p.nr_naczepy=s.nr_naczepy and p.nr_boczny=s.nr_boczny

Błąd: 

Błąd bazy danych, nie można wykonać zapytania do bazy Błąd MySQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'pal as ( select nr_naczepy,nr_boczny,sum(pal_wym),sum(pal_nwm) from palety group' at line 1

+1 głos
odpowiedź 30 czerwca 2018 przez Chess Maniak (69,550 p.)
select sum(pal.palety) as palety, sum(pal.palety_1) as palety_1,
	sum(q.transportery) as transportery, sum(q.transportery_1) as transportery_1, 
    sum(x.skrzynki) as skrzynki, sum(x.skrzynki_1) as skrzynki_1,
	pal.naczepa, pal.nr_boczny
from pal
    natural join tran as q
	natural join skr as x 
where naczepa = q.naczepa and naczepa = x.naczepa  and q.naczepa = x.naczepa group by naczepa;

pal - palety, tran - transportery, skr - skrzynki.

Podobne pytania

0 głosów
1 odpowiedź 57 wizyt
pytanie zadane 10 lipca w PHP, Symfony, Zend przez Leszek Dybiec Nowicjusz (200 p.)
0 głosów
2 odpowiedzi 95 wizyt
0 głosów
1 odpowiedź 84 wizyt
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

65,786 zapytań

112,438 odpowiedzi

237,540 komentarzy

46,728 pasjonatów

Przeglądających: 198
Pasjonatów: 14 Gości: 184

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...