Autor Zpráva
ludvalb
Profil
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
Např. ... *(ks_prodej - IFNULL(ks, 0))) zisk ..Pro více hodnot, z nichž chcete použít první nenulovou, slouží funkce COALESCE.
ludvalb
Profil
Velice děkuji. .. *(ks_prodej - IFNULL(ks, 0))) zisk .. funguje skvěle.

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:

0