• 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

VPS Starter Arubacloud
+2 głosów
316 wizyt
pytanie zadane 29 czerwca 2018 w SQL, bazy danych przez hiper007 Stary wyjadacz (11,270 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 Szeryf (79,280 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 (11,270 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 Szeryf (79,280 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 (11,270 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 Szeryf (79,280 p.)

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

+1 głos
odpowiedź 29 czerwca 2018 przez jeremus Maniak (59,720 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 (11,270 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 Szeryf (76,710 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ź 249 wizyt
pytanie zadane 10 lipca 2019 w PHP przez Jano1890 Nowicjusz (200 p.)
0 głosów
1 odpowiedź 281 wizyt
0 głosów
2 odpowiedzi 174 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...