Witam,
Mam listę produktów i muszę pobrać dane tych produktów a te z kolei rozrzucone są po różnych tabelach.
Tabele:
projekty:
- id_projekt,
- prefix,
- nazwa,
- puzytkowa,
- kubatura,
...
technologie:
- id_parametry,
- id_projekt,
....
kosztorysy:
- id_parametry,
- id_el_kosztorysowy,
- kwota,
- kwota_syst_gosp,
- kwota_materialy,
...
Tabela technologie zawiera nazwy technologii dla wszystkich projektów zawartych w tabeli projekty
natomiast tabela kosztorysy zawiera koszty tylko dla niektórych projektów.
Wszystko działa jeśli dla wybranych projektów są kosztorysy, jeśli ich nie ma warunek nie jest spełniony i zwraca pusty wynik.
Jak przebudować zapytanie by zwracało informacje o projektach a w przypadku gdy nie ma kosztorysu to pola kwota, kwota_syst_gosp i kwota_materialy mialy wartosc 0.
SELECT p.nazwa,p.prefix,p.puzytkowa, p.kubatura, SUM(ko.kwota), SUM(ko.kwota_syst_gosp), SUM(ko.kwota_materialy) FROM projekty AS p INNER JOIN technologie AS te USING(id_projekt) INNER JOIN kosztorysy AS ko ON ko.id_technologia ko.id_technologia = te.id_parametry WHERE hide=0 AND mtmstyl=1 AND prefix IN('proj_1','proj_2') AND ko.id_el_kosztorysowy IN(1,1000) GROUP BY p.nazwa,p.prefix,p.puzytkowa, p.kubatura ORDER BY nazwa DESC
INNER JOINY zamienić na LEFT JOINY a SUM(...) na Coalesce(SUM(...),0)
Dziękuję za naprowadzenie, wszystko śmiga jak należy.
SELECT p.nazwa,p.prefix,p.puzytkowa, p.kubatura, Coalesce(SUM(ko.kwota),0) AS cena_sys_zleconym, Coalesce(SUM(ko.kwota_syst_gosp),0) AS cena_sys_gospodarczym, Coalesce(SUM(ko.kwota_materialy),0) AS koszt_materialow FROM projekty AS p INNER JOIN technologie AS te USING(id_projekt) LEFT JOIN kosztorysy AS ko ON ko.id_technologia ko.id_technologia = te.id_parametry AND ko.id_el_kosztorysowy IN(1,1000) WHERE hide=0 AND mtmstyl=1 AND prefix IN('proj_1','proj_2') GROUP BY p.nazwa,p.prefix,p.puzytkowa, p.kubatura ORDER BY nazwa DESC
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)