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 |
#2 · Zasláno: 19. 8. 2016, 08:04:38
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 * |
#3 · Zasláno: 19. 8. 2016, 08:07:18
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 |
#4 · Zasláno: 19. 8. 2016, 08:28:23
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. |
||
Časová prodleva: 3 dny
|
|||
Kajman Profil |
#5 · Zasláno: 22. 8. 2016, 08:02:18
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' |
||
Časová prodleva: 8 let
|
0