Autor Zpráva
wfhuie
Profil *
Dobrý den, potřeboval bych poradit s databází. Mám tabulku strojů a k nim tabulku s výrobky které se na stroji vyráběly v konkrétní směně. Stroj ve směně nemusel vyrábět nic nebo vyráběl jeden a více výrobků.
Výpis má být tabulka všech strojů + počet výrobků které se v dané směně vyráběly a počet výrobků které byly dokončeny. Mám zatím toto:

Stroj (ID, nazev, pracoviště)
Výrobek(ID, nazev, stroj, směna, dokonceno)

SELECT m.nazev as stroj, m.pracoviste, v.nazev as vyrobek, v.smena, count(*) as pocet vyrobku, SUM((CASE WHEN dokonceno IS NOT NULL THEN 1 ELSE 0 END)) as dokonceno
FROM stroje as m
join vyrobky as v on v.stroj = m.ID
where smena='2016-08-19'
order by m.nazev, m.pracoviste, v.nazev, v.smena

Tento dotaz ale nevrátí tabulku kde počet řádků = počet strojů, tj. stroje tam jsou vícekrát. děkuji za radu


wfhuie:
Nebo to vypíše jen ty stroje na kterých se vyrábělo. potřebuju vypsat i ty na kterých se nevyrábělo.


Ještě změna:
Informace o tom, jestli bylo dokončeno nebo ne jsou ve třetí tabulce takže ještě jednou:
Stroj (ID, nazev, pracoviště)
Výrobek(ID, nazev, stroj, směna, dokonceno)
InfoVyrobky(ID, vyrobek, smena, stroj, dokonceno, expedovano, status1, status1)

SELECT m.nazev as stroj, m.pracoviste, v.nazev as vyrobek, v.smena, count(*) as pocet vyrobku, SUM((CASE WHEN dokonceno IS NOT NULL THEN 1 ELSE 0 END)) as dokonceno
FROM stroje as m
join vyrobky as v on v.stroj = m.ID
join infoVyrobky as iv on iv.vyrobek = v.ID
where smena='2016-08-19'
order by m.nazev, m.pracoviste, v.nazev, v.smena
Keeehi
Profil
No a jak by měla vypadat výsledná tabulka? Řekneme že na jednom stroji se vyrobili dva různé výrobky, ma druhém stroji se nevyrobilo nic a na třetím dva stejné výrobky.
sihi
Profil *
Například takto:
Stroj|PočetVyrobku|Dokonceno
----------------------------------------
S1 |10 |8
S2 |5 |2
S3 |17 |16
S4 |7 |7
S5 |0 |0
S6 |0 |0
Keeehi
Profil
SELECT stroje.nazev, COUNT(*), COUNT(infoVyrobky.vyrobek)
FROM stroje
LEFT JOIN vyrobky
ON stroje.ID = vyrobky.stroj
LEFT JOIN infoVyrobky
ON vyrobky.ID = infoVyrobky.vyrobek
WHERE smena='2016-08-19' OR smena IS NULL
GROUP BY stroje.ID

Tabulky vyrobky a infoVyrobky nedávají moc smysl. Duplikují si sloupce a není mi moc jasné, co a kdy by mělo v té druhé být.
Kajman
Profil
Podmínka na směnu patří do left joinu. Pokud bude nějaká směna k výrobku, ale nebude v daný datum, tak by ten výrobek nebyl zobrazen.
LEFT JOIN infoVyrobky
ON vyrobky.ID = infoVyrobky.vyrobek
   AND smena='2016-08-19'

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: