Mám drobný problém. Spojil jsem tabulky joinem a potřebuji sečíst hodnoty z tabulek (zustatek1, zustatek2). Bohužel mi nejde sečíst. Myslím, že je to tím, že díky spojení tabulky se 100.000 záznamy a tabulky, kde je záznamů pár desítek byly doplněny chybějící záznamy hodnotou null. Zkoušel jsem UPDATE pohledu (sloupce zůstatek 2), tak, aby hodnotu null přepsal na 0. Bohužel mi to napsalo, že že nemůže být provedeno z důvodu porušení kontrolních pravidel. Nevíte, jak bych mohl tento problém obejít? Díky.
Fórum › MS SQL
Propojení tabulek + výpočty
ako sa da v tabulke ktora je cisto len pre zobrazenie vystupu z joinu zmenit null na 0? ... preco by to vlastne niekto robil?
len taky detail ... pri pouziti subquery by nevznikali nezmyselne riadky ...
inak vecsina RDBMS pre MySQL ignoruje NULL v SUM ... ale myslim ze v standarde to nieje
Příkaz (nemám teď přístup, ale takhle přibližně to bylo):
SELECT Podúčty.ID, Podúčty.Měna, Podúčty.Zůstatek, Jistoty.JistotaCM, Opravy.OpravaČástkyCM, Kurzy.Kurz,
Součet = Podúčty.Zůstatek + Jistoty.JistotaCM + Opravy.OpravaČástkyCM,
CM = součet * Kurzy.Kurz
FROM Podúčty LEFT JOIN Jistoty ON Podúčty.ID = Jistoty.ID LEFT JOIN Opravy ON Podúčty.ID = Opravy.ID LEFT JOIN Kurzy ON Podúčty.Měna = Kurzy.Měna;
Jinak díky moc za rychlé odezvy. FM
v SELECT len vymenovavas stlpce ktore chces vytlacit ... ak ho chces pomenovat tak su na to specialne sposoby
v SELECT urcite nedefinuj Soucet ani CM ... v podstate ho ani nepouzivas ... proste tam napis co chces vytlacit ... ked tam napises 100 tak ti do kazdeho riadku da 100 ... ak tam napises 100+1 tak ti tam da 101 atd ...
SELECT
Podúčty.ID
, Podúčty.Měna
, Podúčty.Zůstatek
, Jistoty.JistotaCM
, Opravy.OpravaČástkyCM
, Kurzy.Kurz
, Součet = ISNULL(Podúčty.Zůstatek, 0) + ISNULL(Jistoty.JistotaCM, 0) + ISNULL(Opravy.OpravaČástkyCM, 0)
, CM = (ISNULL(Podúčty.Zůstatek, 0) + ISNULL(Jistoty.JistotaCM, 0) + ISNULL(Opravy.OpravaČástkyCM, 0)) * ISNULL(Kurzy.Kurz, 0)
FROM
Podúčty
LEFT JOIN Jistoty ON Podúčty.ID = Jistoty.ID
LEFT JOIN Opravy ON Podúčty.ID = Opravy.ID
LEFT JOIN Kurzy ON Podúčty.Měna = Kurzy.Měna
;
V jednom selectu nelze pouzit ve vypoctu jiny sloupec vypocteny v tomtez selectu (v tomto pripade Soucet)
BTW pouzivani diakritiky v nazvech tabulek a sloupcu je prasarna a jen si tim zadelavas na problemy.
Upravil jsem diakritiku, přesto se stále potýkám se dvěma problémy. První z nich je u LEFT JOIN. Pokud napíšu jeden, je to v pohodě. Pokud však dám:
SELECT
T_Poducty.ID, T_Poducty.Mena, T_Poducty.Zustatek, T_Jistoty.Jistota, T_Opravy.Oprava, T_Meny.Kurz
FROM
Poducty
LEFT JOIN T_Jistoty ON T_poducty.ID = T_Jistoty.ID
LEFT JOIN T_Opravy ON T_Poducty.ID = T_Opravy.ID
LEFT JOIN T_Meny ON T_Poducty.Mena = T_Meny.Mena;
Access mi napíše: Syntaktická chyba (chybí operátor) v dotazovém výrazu T_Poducty.ID = T_Jistoty.ID LEFT JOIN ....
druhou věc, kterou se mi nepodařilo vyřešit je součet polí:
Tento příkaz mi píše nesprávný počet argumentů ve výrazu (ISNULL...
SELECT T_Poducty.ID, T_Poducty.Mena, T_Poducty.Zustatek,T_Jistoty.Jistota, (ISNULL([T_Poducty.Zustatek], 0))+(ISNULL([T_Jistoty.Jistota], 0)) AS SUMA
FROM
T_Poducty
LEFT JOIN T_Jistoty ON T_Poducty.ID = T_Jistoty.ID;
A standardní
SELECT T_Poducty.ID, T_Poducty.Mena, T_Poducty.Zustatek,T_Jistoty.Jistota, [T_Poducty.Zustatek]+[T_Jistoty.Jistota] AS SUMA
FROM
T_Poducty
LEFT JOIN T_Jistoty ON T_Poducty.ID = T_Jistoty.ID;
mi sečte pouze buňky, ve kterých je hodnota ve sloupci Jistina. Tam, kde je pouze Zůstatek, tam součet neproběhne. Díky za pomoc.
ad 1) mas tam "FROM Poducty" a pak "ON T_Poducty.ID" atd.
ad 2) Access ma svou funkci ISNULL, ktera je jina. Zkus tedy COALESCE(T_Poducty.Zustatek, 0) .
Access moc neznam, vychazel jsem z toho, ze se jedna o MSSQL, kdyz je to v teto sekci.
Dík za tip! Nz funguje bez potíží včetně sumy. Tak už mě trápí jenom to spojení. Samostatně jsem schopen poskládat v rámci postupných dotazů. Pokud však chci vše v jednom a vyberu vše, co potřebuju, pod sebe dám 3 x LEFT JOIN, napíše mi syntaktickou chybu. Přitom jsem to kontroloval a mám snad vše v pohodě:
SELECT
T_Poducty.ID, T_Poducty.Mena, T_Poducty.Zustatek, T_Jistoty.Jistota, T_Opravy.Oprava, T_Meny.Kurz
FROM
Poducty
LEFT JOIN T_Jistoty ON T_poducty.ID = T_Jistoty.ID
LEFT JOIN T_Opravy ON T_Poducty.ID = T_Opravy.ID
LEFT JOIN T_Meny ON T_Poducty.Mena = T_Meny.Mena;
Hlásí to chybu syntaxe (chybí operátor) na konci řádku
Poducty
LEFT JOIN T_Jistoty ON T_poducty.ID = T_Jistoty.ID
Díky moc za rady. Jsem poněkud pomalejší. Funguje mi takto:
SELECT
T_Poducty.ID, T_Poducty.Mena, T_Poducty.Zustatek, T_Jistoty.Jistota, T_Opravy.Oprava, T_Meny.Kurz
FROM
((T_Poducty
LEFT JOIN T_Jistoty ON T_Poducty.ID = T_Jistoty.ID)
LEFT JOIN T_Opravy ON T_Poducty.ID = T_Opravy.ID)
LEFT JOIN T_Meny ON T_Poducty.Mena = T_Meny.Mena;
A komplet dohromady, jak jsem potřeboval je:
SELECT T_Poducty.ID, T_Poducty.Mena, T_Poducty.Zustatek, Nz(T_Jistoty.Jistota, 0) AS Jistota, Nz(T_Opravy.Oprava, 0) AS Oprava, [T_Poducty.Zustatek]+[Jistota]+[Oprava] AS Suma, T_Meny.Kurz, [Suma]*[T_Meny.Kurz] AS Celkem
FROM
((T_Poducty LEFT JOIN T_Jistoty ON T_Poducty.ID = T_Jistoty.ID)
LEFT JOIN T_Opravy ON T_Poducty.ID = T_Opravy.ID)
LEFT JOIN T_Meny ON T_Poducty.Mena = T_Meny.Mena;
Ještě jednou všem moc díky.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Propojení dvou tabulek — založil Pavelv
MySQLi - propojení dvou tabulek — založil Slim
Propojení dvou tabulek MySQL. — založil hustoles
PHP a SQL - propojení dvou tabulek — založil Slim
Datum a čas - výpočty — založil Ladis
Moderátoři diskuze