Diskuze: Access - sečtení dat dvou tabulek
Člen
Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Napiš sem, dotaz, kterým to sčítáš. Já bych použil JOIN na tabulky při součtu v SQL dotazu...
Děkuji za radu. Nakonec jsem tabulky spojil pomoci Left a Right Join a podmínkami ve výrazu jsem si zajistil, aby se mi vždy ukázala celková cena bez ohledu, jestli jsou použity díly/práce nebo každý zvlášť. Stačil mi jen ten join, zbytek jsem si už nějak dohledal na internetu
Aha, tak jak to tak projíždím, tak to mám stejně blbě. JOIN funguje skvěle, až moc. Pokud vytvořím k zakázce 3 entity dílů a jednu entitu úkonů, tak mi to ke každému dílu přiřadí jeden a ten samý úkon, takže cena je v tomto případě 3* vyšší. Prostě mi to přiřadí ke každé entitě díly úkon, který už jednou přiřazen byl...
SELECT *
FROM tblDílyNaZakázce LEFT JOIN tblÚkonyNaZakázce ON tblDílyNaZakázce.KódZakázky = tblÚkonyNaZakázce.KódZakázky;
UNION
Select *
FROM tblDílyNaZakázce right JOIN tblÚkonyNaZakázce ON tblDílyNaZakázce.[KódZakázky] = tblÚkonyNaZakázce.[KódZakázky];
Problém je v tom kódu zakázky, ten je pro všechny záznamy dílů i úkonů stejný, takže se u dané zakázky stále opakuje, proto ten JOIN může přiřadit jeden úkon k několika dílům a naopak. Chtělo by to nějak ošetřit, aby se mohlo opakovat číslo úkonu a dílu jen jednou pro danou zakázku. Protože na zakázce 2* stejný úkon/díl vybrat nemůžu, to mám ošetřeno, na to tam je počet kusů/hodin.
Našel jsem si řešení, ale nevím jak jej do výše zmíněného napsat. Řešení bude asi DISTINCTROW pro unikátní kombinaci IDZakazky,IDDilu a IDUkonu
Kdybys dal "odpovědět", věděl bych už včera, že jsi reagoval...
Podle mě ti tam chybí jen nějaká podmínka, něco jako
where zakazka = něco
UNION bych tam vůbec nedával, podle mě je to zbytečný.
Děj sem někam strukturu těch tabulek a nějaký příklad toho, co chceš
vytáhnout...
http://i60.tinypic.com/2q9vwjn.jpg
takhle vypadají ty tabulky ve spojení se zakázkou. Z každé z tabulek si pomocí dotazu a výrazů umím spočítat cenu za díly a za úkony na zakázce. Ale jen každou zvlášť. Problém byl v sečtení celkové ceny. Když jsem na zakázce neměl použité díly, nemohl jsem nic sečíst. Snažil jsem se to řešit i podmínkami, ale pokud jsem dal do dotazu obě tabulky a jedna z nich byla prázdná, ani dotaz se nespustil a objevilo se jen bílé okno.
Proto jsem ty 2 tabulky chtěl pomocí left a roght spojit dohromady, abych mohl dotazy tvořit nad tímto.Problém je ta duplikace hodnot, že se snaží ke každému řádku docpat řádek z druhé tabulky, i za cenu duplikace. Podle internetu je to častá věc, ale netuším, jak se toho zbavit. Ani do jedné tabulky nemůžu dát k jedné zakázce dva stejné úkony/díly, ale join to naprosto ignoruje.
Cílem tedy je spojit jen ty 2 tabulky tak, že když budu mít 3 záznamy dílů a 1 úkonu, tak po spojení budu mít 1 řádek obsazen celý a 2 zbylé jen s dílem a část s úkony bude prázdná(momentálně to právě ten jeden úkon zkopíruje do všech neobsazených řádků)
Tabulky nevidím, normálně sem napiš strukturu tabulek
Momentálně nemám projekt u sebe, jsem mimo domov, upnul to za mě bratr to bratr.
Toto bych asi nespojoval, zbytečně si tím přitížíš. Počítal bych to
jako dvě oddělené ceny a pak bych je sečetl, abych dostal celkovou sumu. Ty
ceny bych však zahrnul do tabulky "tblZakázky", abych je nemusel při každém
zobrazení znovu počítat... Přidal bych tam sloupce, něco jako "CenaPráce",
"CenaPrácePoSlevě", "CenaDílů",
CenaDílůPo Slevě" a "CelkováCena" a pokud bych chtěl detaily, pak bych je
zobrazil z příslušných tabulek.
Tak jsem to nakonec částečně pořešil dle rady. Do tabulky Zakýzky jsem si přidal pole CenaDily a CenaUkony. Pomocí dotazů jsem si nad tabulkami spočítal celkové ceny za Díly a úkony a ty jsem pak překopíroval do těch polí v tabulce zakázky.
Problém stejně byl ty hodnoty tam přesunout. Jelikož jsme to dělal z dotazu, tak mi Access nechtěl povolit přidání hodnot do tabulky(na netu jsem se pak dočetl, že to nedovolí nikdy, pokud se jedná o nějaké pole, které se počítá)
Takže řešením bylo si vytvořit fiktivní tabulky, které obsahují hodnoty dotazů pro celkové sumy úkonů a dílů zakázek a následně přidávací dotaz pro překopírování hodnot z fiktivních tabulek. To jsem spojil do makra a pak pomocí VBA vypnul ty otravné upozornění u vytvářecích a přidávacích dotazů.
Celkově mi řešení příjde jako prasárna, která zbytečně zatěžuje systém jako takový, protože při každé změně vytváří a přepisuje hodnoty z fiktivních tabulek.
Zobrazeno 12 zpráv z 12.