Autor | Zpráva | ||
---|---|---|---|
ludvalb Profil |
#1 · Zasláno: 9. 11. 2012, 19:35:38
Zdravím, potřeboval bych pomoci s následujícím SELECTem
SELECT date, SUM((prodej*((100-sleva)/100)-nakup)*(100/(100+dph))*(ks_prodej-ks)) zisk FROM (SELECT * FROM deni_prehled UNION ALL SELECT * FROM zaloha_deni_prehled) deni_prehled_virtual left join vracene_zbozi on (deni_prehled_virtual.date=vracene_zbozi.datum_prodeje AND deni_prehled_virtual.autoID=vracene_zbozi.dokladID AND deni_prehled_virtual.produktID=vracene_zbozi.produktID) WHERE autoID>0 AND date!="0000-00-00" GROUP BY YEAR(date),MONTH(date) ORDER BY date Mám tyto tabulky: CREATE TABLE IF NOT EXISTS `vracene_zbozi` ( `ID` int(10) NOT NULL, `dokladID` int(10) NOT NULL, `produktID` int(10) NOT NULL, `datum_vraceni` date NOT NULL, `datum_prodeje` date NOT NULL, `ks` int(10) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `deni_prehled` ( `ks_prodej` int(10) DEFAULT NULL, `sleva` int(10) DEFAULT NULL, `autoID` int(10) NOT NULL, `produktID` int(11) NOT NULL, `date` date NOT NULL, `nakup` decimal(7,2) NOT NULL, `prodej` decimal(7,2) NOT NULL, `dph` int(10) NOT NULL, `vraceno` int(10) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `zaloha_deni_prehled` ( `ks_prodej` int(10) DEFAULT NULL, `sleva` int(10) DEFAULT NULL, `autoID` int(10) NOT NULL, `produktID` int(11) NOT NULL, `date` date NOT NULL, `nakup` decimal(7,2) NOT NULL, `prodej` decimal(7,2) NOT NULL, `dph` int(10) NOT NULL, `vraceno` int(10) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; Můj problém spošívá v tom, že když mám selectu (ks_prodej-ks) na místo ks_prodej, pak je celý select početně špatný. Má to fungovat asi takto: sloučí tabulky deni_prehled a zaloha_deni_prehled a připojí k nim tabulku vracene_zbozi a pokud tabulka vracene_zbozi obsahuje nějaké záznamy, pak musí odečíst zisk z tohoto jednoho prodeje, který byl stornován. PS: výpočet se týká pouze zisku (zjišťuje se pouze zisk za každý měsíc). Zákazník ale může zboží vrátit bez ohledu na uplynulou dobu, takže třeba až v dalším měsíci a je potřeba aby se data změnila. Domnívám se, že problém je ve vnějším spojení, ale nevím co se dosazuje za prázdné údaje (asi NULL) a netuším jak to případně nastavit aby se místo toho doplnila 0. Předem děkuji za pomoc. |
||
Tori Profil |
#2 · Zasláno: 9. 11. 2012, 19:58:23
Např.
... *(ks_prodej - IFNULL(ks, 0))) zisk .. Pro více hodnot, z nichž chcete použít první nenulovou, slouží funkce COALESCE.
|
||
ludvalb Profil |
#3 · Zasláno: 9. 11. 2012, 20:07:28
Velice děkuji. .. *(ks_prodej - IFNULL(ks, 0))) zisk .. funguje skvěle.
|
||
Časová prodleva: 11 let
|
0