Hirdetés
Új hozzászólás Aktív témák
-
BeeGee2115
csendes tag
válasz
Apollo17hu
#3643
üzenetére
Igen, köszönöm, nálam az IFNULL() volt a nyerő

A végeredmény pedig:SELECT
szla.Számla,
szla.szamla_ertek- IFNULL(tran.tranzakcio_ertek,0) AS Egyenleg
FROM
(SELECT Számla,
SUM(Összeg) AS szamla_ertek
FROM Adatok
GROUP BY Számla) szla
LEFT JOIN (SELECT Tranzakció,
SUM(Összeg) AS tranzakcio_ertek
FROM Adatok
GROUP BY Tranzakció) tran
ON szla.Számla = tran.Tranzakció -
BeeGee2115
csendes tag
válasz
Apollo17hu
#3641
üzenetére
Már majdnem jó!
A +os szintaktika nem működik, ezért átírtam LEFT JOIN-ra:SELECT
szla.Számla,
szla.szamla_ertek - tran.tranzakcio_ertek
FROM
(SELECT Számla,
SUM(Összeg) AS szamla_ertek
FROM Adatok
GROUP BY Számla) szla
LEFT JOIN (SELECT Tranzakció,
SUM(Összeg) AS tranzakcio_ertek
FROM Adatok
GROUP BY Tranzakció) tran
ON szla.Számla = tran.TranzakcióErre azonban azokak a számláknak, amelyekről sosem történt tranzakció, nem lesz egyenlege

-
BeeGee2115
csendes tag
válasz
BeeGee2115
#3638
üzenetére
Közben agyaltam kicsit és arra jutottam, hogy ennek a két lekérdezésnek a kivonása jelentené a megoldást:
A)
SELECT Számla,
SUM(Összeg) Egyenleg
FROM Adatok
GROUP BY Számla;
B)
SELECT Tranzakció,
SUM(Összeg) Egyenleg
FROM Adatok
WHERE Tranzakció!=''
GROUP BY Tranzakció;A-B hogyan lehetséges?
-
BeeGee2115
csendes tag
válasz
Apollo17hu
#3637
üzenetére
Kedves Apollo17hu! Azért nem hagyhatjuk ki a tranzakciókat, mert akkor hibás egyenlegeket kapunk, hiszen az egyik számláról a másikra történő átutalások kiesnének a rendszerből.
Ez már majdnem jó:
SELECT Számla,
SUM(Összeg) - SUM(CASE WHEN Tranzakció!='' then Összeg ELSE 0 END) Egyenleg
FROM Adatok
GROUP BY Számla
A probléma az hogy a tranzakció oszlopban lévő aktuális számlanevet kellene valahogy a megfelelő számlából kivonni, hiszen most csak azt vizsgáljuk, hogy üres vagy sem, de nem az értékét. Egy soron belül a tranzakció és számla oszlopok különböző számlaneveket tartalmaznak a tranzakció értelmének megfelelően. -
BeeGee2115
csendes tag
válasz
Apollo17hu
#3635
üzenetére
Köszönöm! De a probléma az, hogy ez továbbra is csak a Számla oszlop szerint fog pozitív vagy negatív értékeket listázni nekem. Én azt szeretném elérni, hogy soronként haladva megvizsgáljuk a számla és a tranzakció oszlopokat is és ha a tranzakció üres akkor semmi gond, csak hozzáadjuk az összeget a számla oszlopban lévő számlához (akár pozitív, akár negatív az összeg), ha viszont van tranzakció, akkor (a biztosan pozitív) összeget ki kell vonnunk a tranzakció oszlopban szereplő számla egyenlegéből is.
Vagy egy másfajta megközelítésben szummázzuk az összegeket a számla oszlop szerint, majd kivonunk minden összeget a tranzakció oszlop alapján. És ennek vesszük a rendezett nézetét.
A két lekérdezést külön-külön már össze is raktátok nekem, ezért ezer hála, de a végső megoldást még nem lelem.
A Jézuska megérkezett közben, Boldog Karácsonyt
-
-
BeeGee2115
csendes tag
Sziasztok!
Adott egy Synology DS, amelyen phpMyAdmin és mögötte MariaDB10 leledzik.
Ebben létrehoztam egy adatbázist, amiben pedig egy csodaszép adattáblát több ezer sorral. Gyönyörűen mennek a lekérdezések, és bár kezdőnek számítok az SQL-ben, egész hamar kiismertem magam ebben a világban. Azonban most szükségem lenne a ti tudásotokra!
Az alapok a problémához:
Adatok tábla tartalmazza a következő oszlopokat (többek között):
..., Számla (egy számla neve varchar 255 NOT NULL), Összeg (a pénzösszeg double NOT NULL), Tranzakció (egy számla neve varchar 255), ...Létezik nagyjából 12 féle különböző számla. (Készpénz, Bankkártya... stb).
Az adatbázis soraiban a következő szabályok élnek:
- A számla oszlop sohasem lehet üres
- Az összeg lehet pozitív vagy negatív (bevétel vagy kiadás)
- A tranzakció oszlopban csak akkor szerepel számlanév, ha egyik számláról mozgatunk át összeget a másikra, de ebben az esetben az összeg csak pozitív lehet (mert a mozgatás iránya kötött: Tranzakció -> Számla)Szeretnék egy lekérdezést/nézetet/másik táblát (tökmindegy), ahol az első oszlopban a lehetséges Számla nevek szerepelnek, majd a következő oszlopban az egyenlegek, amik ezzel az agyafúrt logikával számolódnak.
Magamtól odáig jutottam, hogy SELECT DISTINCT-el létrehoztam egy `Szamlak` táblát és abban egy Számla és egy Egyenleg oszlopot, ahol az Egyenleget így UPDATE-elem:
UPDATE `Szamlak` SET `Szamlak`.`Egyenleg` = (SELECT SUM(`Adatok`.`Összeg`) FROM `Adatok` WHERE `Adatok`.`Számla` = `Szamlak`.`Számla`) - (SELECT SUM(`Adatok`.`Összeg`) FROM `Adatok` WHERE `Adatok`.`Tranzakció` = `Szamlak`.`Számla`);
Ez már majdnem jó, de azoknál a számlaneveknél, ahol szóköz van, egyszerűen nem számol semmit, az érték 0 marad...

Előre is köszönök minden tippet, segítséget!
Új hozzászólás Aktív témák
Hirdetés
- AMD Ryzen 5 1600X AM4
- Eladó Apple iPad (2020) 2. generáció Cellular + WiFi 512 GB
- iPhone 16 128GB gyári független hibátlan 2028.10.20. Apple jótállás
- iPhone 17 256GB gyári független hibátlan 2029.02.13. Apple jótállás
- Ryzen 7 7800X3D +ASRock X870 PRO RS WIFI +32GB 6000MHz DDR5 kit! GAR/SZÁMLA (a Te nevedre kiállítva)
- ÁRGARANCIA!Épített KomPhone i5 14600KF 32/64GB RAM RTX 5060Ti 16GB GAMER PC termékbeszámítással
- Új MSI MAG PANO M100R PZ Black pc ház, számítógép ház
- AKCIÓ! ASRock B450M R5 5500 16GB DDR4 512GB SSD RTX 2060 6GB Zalman T3 Plus ADATA 600W
- Lenovo ThinkPad T14 Gen2 Intel i5-1135G7 Refurbished - Garancia
- 194 - Lenovo Legion 5 (15IRX10) - Intel Core i9-14900HX, RTX 5070 (ELKELT)
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest





