"CASE WHEN" syntax error
"CASE WHEN" syntax error
Sziasztok!
Van egy táblám, amelyre a következő lekérdezést hoztam létre:
SELECT "Datum" AS "Datum", "BizSzam" AS "BizSzam", "Partner" AS "Partner", "Megjegyzes" AS "Megjegyzes", "FokSzamJelleg" AS "FokSzamJelleg", "FokSzam" AS "FokSzam", "AfaJelleg" AS "AfaJelleg", "AfaFokSzam" AS "AfaFokSzam", "Brutto" AS "Brutto", "Brutto" / 127 * 100 AS "Netto", "Brutto" / 127 * 27 AS "Afa" FROM "Naplo_Penztar" WHERE "Datum" >= :KezdőDátum AND "Datum" <= :Végdátum ORDER BY "Datum" ASC
Ez tulajdonképpen a meglévő bruttó mezőből két új mezőbe beírja a nettó és az áfá értékét is (dátumra lehet szűkíteni).
Annyit szerettem volna benne bővíteni, hogy a nettó és az áfa értékét csak akkor számolja, ha az "AfaJelleg" mező értéke 't' vagy 'k'.
A CASE WHEN feltétellel próbáltam, de akárhogy és akárhová írom, mindig SYNTAX ERROR-t ír. Már megőrülök, minden variációt kipróbáltam, egyszerűen nem megy!
Tudtok segíteni?
Üdv.
boncsa
Van egy táblám, amelyre a következő lekérdezést hoztam létre:
SELECT "Datum" AS "Datum", "BizSzam" AS "BizSzam", "Partner" AS "Partner", "Megjegyzes" AS "Megjegyzes", "FokSzamJelleg" AS "FokSzamJelleg", "FokSzam" AS "FokSzam", "AfaJelleg" AS "AfaJelleg", "AfaFokSzam" AS "AfaFokSzam", "Brutto" AS "Brutto", "Brutto" / 127 * 100 AS "Netto", "Brutto" / 127 * 27 AS "Afa" FROM "Naplo_Penztar" WHERE "Datum" >= :KezdőDátum AND "Datum" <= :Végdátum ORDER BY "Datum" ASC
Ez tulajdonképpen a meglévő bruttó mezőből két új mezőbe beírja a nettó és az áfá értékét is (dátumra lehet szűkíteni).
Annyit szerettem volna benne bővíteni, hogy a nettó és az áfa értékét csak akkor számolja, ha az "AfaJelleg" mező értéke 't' vagy 'k'.
A CASE WHEN feltétellel próbáltam, de akárhogy és akárhová írom, mindig SYNTAX ERROR-t ír. Már megőrülök, minden variációt kipróbáltam, egyszerűen nem megy!
Tudtok segíteni?
Üdv.
boncsa
Ubuntu 10.04 LTS, OpenOffice 3.2
- Zizi64
- Globális moderátorok
- Hozzászólások: 4034
- Csatlakozott: 2008. november 12., szerda 21:22
- Tartózkodási hely: Budapest
Re: "CASE WHEN" syntax error
Sajnos a Base-ban teljesen járatlan vagyok, segíteni nem tudok.
(r4zoli a te embered nagy valószínűséggel - meg még egy páran jóval jártasabbak az adatbázis kezelésben, mint én.)
Most viszont a témádat leválasztom, áthelyezem, mert "Egy probléma - egy kérdés" az alapszabály itt a fórumon. Ott keresd majd a hozzászólásodat. Így, hogy a téma címét az n-edik hozzászólás után módosítod, végképp átláthatatlan lesz a fórum...
(r4zoli a te embered nagy valószínűséggel - meg még egy páran jóval jártasabbak az adatbázis kezelésben, mint én.)
Most viszont a témádat leválasztom, áthelyezem, mert "Egy probléma - egy kérdés" az alapszabály itt a fórumon. Ott keresd majd a hozzászólásodat. Így, hogy a téma címét az n-edik hozzászólás után módosítod, végképp átláthatatlan lesz a fórum...
Szerkesztett: No, már meg is tettem... |
Sok sikert!
Kovács Tibor (W10x64Pro/W7x64P: 7.5.8;
winPenPack/PortableApps: LO3.3.1-7.6.2, AOO4.1.14
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címének szerkesztésével. Írd elé: [Megoldva].
Kovács Tibor (W10x64Pro/W7x64P: 7.5.8;
winPenPack/PortableApps: LO3.3.1-7.6.2, AOO4.1.14
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címének szerkesztésével. Írd elé: [Megoldva].
Re: "CASE WHEN" syntax error
Üdv!
Erről a függvényről olvashatsz Reizinger Zoltán – Bevezetés az adatbázis használatába 28. oldalán.
Ha jól értelmezem, akkor az SQL lekérdezésekben a mezőneveket idézőjelek, vagy aposztrófok közé kell tenni. A te lekérdezésedben a KezdőDátum és Végdátum csak önmagukban szerepelnek. Továbbá a mezőnevek csak ékezet nélküliek lehetnek (az "álnevek" lehetnek ékezetesek).
A CASE WHEN-ről ezt írja:
Tehát: soronként nézi a feltételeket, ha nem teljesül, akkor nézi a következő sort egészen addig amíg nem teljesül a feltétel. Ha semelyik feltétel sem teljesül, akkor az ELSE részben megadott értéket adja - Ha nincs ELSE, akkor 0. Az egy "sorban" levő feltételeket [] közé kell tenni.
Ha valamit rosszul írtam, akkor nyugodtan javítsatok!
Anti
Erről a függvényről olvashatsz Reizinger Zoltán – Bevezetés az adatbázis használatába 28. oldalán.
Ha jól értelmezem, akkor az SQL lekérdezésekben a mezőneveket idézőjelek, vagy aposztrófok közé kell tenni. A te lekérdezésedben a KezdőDátum és Végdátum csak önmagukban szerepelnek. Továbbá a mezőnevek csak ékezet nélküliek lehetnek (az "álnevek" lehetnek ékezetesek).
A CASE WHEN-ről ezt írja:
Máshogy "ábrázolva":CASE WHEN...[1]
CASE WHEN expr1 THEN v1[WHEN expr2 THEN v2] [ELSE v4] END
amikor expr1 igaz térj vissza v1 értékével [opcionálisan ismételhető több esetre]
[egyébként v4 vagy nulla ha nincs ELSE]
Kód: Egész kijelölése
CASE WHEN expr1 THEN v1
[WHEN expr2 THEN v2]
[WHEN expr3 THEN v3]
[...]
[ELSE v4]
END
Ha valamit rosszul írtam, akkor nyugodtan javítsatok!
Anti
Re: "CASE WHEN" syntax error
Szia!
Eszerint a könyv szerint tanulok én is. A dátummal nincs gondom, működik a lekérdezés vele. Csak akárhová írom a "WHEN CASE" szintaktikát, mindenhol hibát jelez. Konkrétan a fenti kódrészletembe hová tennétek? Elméletileg így nézne ki:
CASE "AfaJelleg" WHEN '*' THEN "Brutto"/127*100 AS "Netto", "Brutto"/127*27 AS "Afa" END
Tehát: Ha az "AfaJelleg" mezőben bármilyen érték van, számolja ki a bruttóból a nettót és az áfát úgy, hogy a nettót és az áfát új oszlopba írja.
Üdv.
boncsa
Eszerint a könyv szerint tanulok én is. A dátummal nincs gondom, működik a lekérdezés vele. Csak akárhová írom a "WHEN CASE" szintaktikát, mindenhol hibát jelez. Konkrétan a fenti kódrészletembe hová tennétek? Elméletileg így nézne ki:
CASE "AfaJelleg" WHEN '*' THEN "Brutto"/127*100 AS "Netto", "Brutto"/127*27 AS "Afa" END
Tehát: Ha az "AfaJelleg" mezőben bármilyen érték van, számolja ki a bruttóból a nettót és az áfát úgy, hogy a nettót és az áfát új oszlopba írja.
Üdv.
boncsa
Ubuntu 10.04 LTS, OpenOffice 3.2
Re: "CASE WHEN" syntax error
Üdv!
Gyorsan próbáltam összerakni egy példa adatbázist. Ebben külön, külön meg tudom csinálni, a lekérdezést, de egyben nem
Ezeket az SQL utasításokat használtam:
Áfa
Brutto
Figyelem! A THEN előtt dupla ' jel (Shift+1) van!
Anti
Gyorsan próbáltam összerakni egy példa adatbázist. Ebben külön, külön meg tudom csinálni, a lekérdezést, de egyben nem
Ezeket az SQL utasításokat használtam:
Áfa
Kód: Egész kijelölése
SELECT CASE WHEN "AfaJelleg" <> '' THEN ( "Brutto" / 127 ) * 27 END AS "Afa", "ID" FROM "TABLA" "AfaJelleg"
Kód: Egész kijelölése
SELECT CASE WHEN "AfaJelleg" <> '' THEN ( "Brutto" / 127 ) * 100 END AS "Netto", "ID" FROM "TABLA" "AfaJelleg"
Anti
- Csatolmányok
-
- CASE-WHEN.odb
- CASE-WHEN példa adatbázis
- (3.46 KiB) Letöltve 238 alkalommal.
Re: "CASE WHEN" syntax error
Üdv!
Ha a fenti lekérdezést elkészíted, akkor ilyesmi eredményt kapsz:
Anti
Ehhez szerintem nem kell a CASE WHEN, mert itt bármilyen érték van akkor el kell készíteni a "Netto" és az "Afa" oszlopot a lekérdezésben. Tehát valami ilyesmi kellene inkább neked:Ha az "AfaJelleg" mezőben bármilyen érték van, számolja ki a bruttóból a nettót és az áfát úgy, hogy a nettót és az áfát új oszlopba írja.
Kód: Egész kijelölése
SELECT "Brutto" AS "Brutto", ( "Brutto" * 100) / 127 AS "Netto", ( "Brutto" * 27 ) / 127 AS "Afa" FROM "TABLA"
Ha a fenti lekérdezést elkészíted, akkor ilyesmi eredményt kapsz:
Kód: Egész kijelölése
| Brutto | Netto | Afa |
|1000 | 787,4| 212,6|
|2000 | 1574,8| 425,2|
Re: "CASE WHEN" syntax error
Nem jó, mert csak akkor kell nettót és áfát számolni, ha bármilyen érték van az "AfaJelleg" mezőben. Lehet, hogy rosszul magyaráztam: ha ez a mező nem tartalmaz adatot, akkor nem áfás a számla. A "bármilyen" meghatározást azért akartam értéknek adni, mert nem akartam azon agyalni, hogy csak 't' és 'k' lehet az "AfaJelleg" értéke. (Vagy üres.)
boncsa
boncsa
Ubuntu 10.04 LTS, OpenOffice 3.2
Re: "CASE WHEN" syntax error
Üdv!
Meglestem ezekkel a feltételekkel is és azt hiszem sikerült alkotnom valamit.
Az alábbi kód az "AfaJelleg_t_k"-ban található meg.
Elvileg annyit tesz, hogy kilistázza a "t" és "k" ÁfaJellegű rekordokat, a "t"-s értékhez 27, a "k"-hoz 20%-ot számol, amit az áfa és a nettó oszlopokba listáz. Lehetne még rendezni is a lekérdezést az ORDER BY segítségével.
Tehát, hogy az alap kérdésre is válaszoljak, úgy kell a CASE WHEN-t használni, (több sorba írom, így talán átláthatóbb)
Mellékelem a gyakorló adatbázisomat. Előfordulhatnak benne hibák. Ezért Csak saját felelősségre!
Anti
Meglestem ezekkel a feltételekkel is és azt hiszem sikerült alkotnom valamit.
Az alábbi kód az "AfaJelleg_t_k"-ban található meg.
Kód: Egész kijelölése
SELECT "AfaJelleg", CASE WHEN "AfaJelleg" = 't' THEN "Brutto" WHEN "AfaJelleg" = 'k' THEN "Brutto" END AS "Brutto", CASE WHEN "AfaJelleg" = 't' THEN ( "Brutto" * 100 ) / 127 WHEN "AfaJelleg" = 'k' THEN ( "Brutto" * 100 ) / 120 END AS "Netto" , CASE WHEN "AfaJelleg" = 't' THEN ( "Brutto" * 27 ) / 127 WHEN "AfaJelleg" = 'k' THEN ( "Brutto" * 20 ) / 120 END AS "Afa" FROM "TABLA" WHERE "AfaJelleg" <> ''
Tehát, hogy az alap kérdésre is válaszoljak, úgy kell a CASE WHEN-t használni, (több sorba írom, így talán átláthatóbb)
Kód: Egész kijelölése
SELECT //Ezzel tudod a lekérdezést végrehajtani
CASE WHEN <feltétel1> THEN <feltétel1 teljesülése esetén ez történik> WHEN <feltétel2> THEN <feltétel2 teljesülése esetén ez történik> ELSE <feltétel1,2...n nem teljesülése esetén ez történik> END AS <amit itt beállítasz az alapján készül el az eredmény>,
A fenti részt annyiszor ismételd, ahány oszlopot szeretnél (persze nem kötelező mindegyiknél CASE WHEN-t használni).
FROM <Tábla>
WHERE <Feltétel>
...
Mellékelem a gyakorló adatbázisomat. Előfordulhatnak benne hibák. Ezért Csak saját felelősségre!
Anti
- Csatolmányok
-
- CASE-WHEN.odb
- Módosított CASE-WHEN Adatbázis
- (4.15 KiB) Letöltve 228 alkalommal.
Re: "CASE WHEN" syntax error
Szia!
Közben én is kiderítettem, hogy kétszer kell a CASE WHEN-t alkalmazni.
És ami nagyon blőd hiba részemről: csak akkor fut a lekérdezés, ha megnyomom az "sql parancs közvetlen futtatása" ikont. (Egyébként nem tudom, hogy ez az ikon mi célt szolgál.) Így jár az, aki kezdő!
Még mindig van egy kis probléma, de előbb agyalok rajta, hátha megoldom. Ha nem sikerül, jelentkezem.
Nagyon, nagyon köszönöm a segítségedet! Ha nem agyalsz velem együtt, nem sikerült volna!
Üdv.
boncsa
Közben én is kiderítettem, hogy kétszer kell a CASE WHEN-t alkalmazni.
És ami nagyon blőd hiba részemről: csak akkor fut a lekérdezés, ha megnyomom az "sql parancs közvetlen futtatása" ikont. (Egyébként nem tudom, hogy ez az ikon mi célt szolgál.) Így jár az, aki kezdő!
Még mindig van egy kis probléma, de előbb agyalok rajta, hátha megoldom. Ha nem sikerül, jelentkezem.
Nagyon, nagyon köszönöm a segítségedet! Ha nem agyalsz velem együtt, nem sikerült volna!
Üdv.
boncsa
Ubuntu 10.04 LTS, OpenOffice 3.2
Re: "CASE WHEN" syntax error
Megint itt vagyok.
Gyönyörűen működik a CASE WHEN, de csak akkor, ha a dátum választást lehagyom a végéről. Illetve lefut a kérdezés, de üresen jelenik meg (nincs rekord benne). Egyébként olyan fura hibaüzeneteket kapok sql-re, nem lehet, hogy valami kiegészítőm hiányzik?
Ez működik szépen, bekéri a dátumot és listáz:
Ez is működik, feltétel szerint kiszámolja a nettót és az áfát:
Viszont a kettő együtt már nem hajlandó dolgozni nekem! Ahogy írtam, nem kéri be a dátum intervallumot és bead egy üres listát, amely csak a mezőneveket tartalmazza.
Valami nagyon nem stimmel.
Üdv.
boncsa
Gyönyörűen működik a CASE WHEN, de csak akkor, ha a dátum választást lehagyom a végéről. Illetve lefut a kérdezés, de üresen jelenik meg (nincs rekord benne). Egyébként olyan fura hibaüzeneteket kapok sql-re, nem lehet, hogy valami kiegészítőm hiányzik?
Ez működik szépen, bekéri a dátumot és listáz:
Kód: Egész kijelölése
SELECT "Datum" AS "Datum", "BizSzam" AS "BizSzam", "Partner" AS "Partner", "Megjegyzes" AS "Megjegyzes", "FokSzamJelleg" AS "FokSzamJelleg", "FokSzam" AS "FokSzam", "AfaJelleg" AS "AfaJelleg", "AfaFokSzam" AS "AfaFokSzam", "Brutto" AS "Brutto" FROM "Naplo_Penztar" WHERE "Datum" >= :KezdőDátum AND "Datum" <= :Végdátum ORDER BY "Datum" ASC
Kód: Egész kijelölése
SELECT CASE WHEN "AfaJelleg" <> '' THEN "Brutto"/127*100 END AS "Netto", CASE WHEN "AfaJelleg" <> '' THEN "Brutto"/127*27 END AS "Afa", "Datum" AS "Datum", "BizSzam" AS "BizSzam", "Partner" AS "Partner", "Megjegyzes" AS "Megjegyzes", "FokSzamJelleg" AS "FokSzamJelleg", "FokSzam" AS "FokSzam", "AfaJelleg" AS "AfaJelleg", "AfaFokSzam" AS "AfaFokSzam", "Brutto" AS "Brutto" FROM "Naplo_Penztar" ORDER BY "Datum" ASC
Valami nagyon nem stimmel.
Üdv.
boncsa
Ubuntu 10.04 LTS, OpenOffice 3.2
Re: "CASE WHEN" syntax error
Üdv!
Ehhez kellene egy mintafájl mert így nehéz megállapítani, hogy mi nem stimmel. De úgy gondolom a WHERE résznél nem sikerül összerakni a lekérdezést. Ott én így készíteném el:
Anti
Ehhez kellene egy mintafájl mert így nehéz megállapítani, hogy mi nem stimmel. De úgy gondolom a WHERE résznél nem sikerül összerakni a lekérdezést. Ott én így készíteném el:
Kód: Egész kijelölése
WHERE ("AfaJelleg" = 't' OR "AfaJelleg" = 'k') AND ("Datum" >= '2012-02-01' AND "Datum" <= '2012-06-01') ORDER BY "Datum" ASC
Szerintem próbáld ki egy másik gépen, ahol biztos minden fent van a tökéletes működéshez.Egyébként olyan fura hibaüzeneteket kapok sql-re, nem lehet, hogy valami kiegészítőm hiányzik?
Anti
Re: "CASE WHEN" syntax error
Megnéztem, másik ubuntus gépen sem működik. Ráadásul most már olyan hibát is ír ha szűrőt akarok nyomni, hogy váratlan hiba lépett fel és újra megnyitáskor helyreállítást végez az openoffice.
Csatoltam az adatbázist.
Üdv.
boncsa
Csatoltam az adatbázist.
Üdv.
boncsa
- Csatolmányok
-
- Új adatbázis3.odb
- (16.36 KiB) Letöltve 242 alkalommal.
Ubuntu 10.04 LTS, OpenOffice 3.2
Re: "CASE WHEN" syntax error
Megoldottam, de máshogy!
Üdv.
boncsa
Üdv.
boncsa
- Csatolmányok
-
- 1_0.odb
- (21.46 KiB) Letöltve 236 alkalommal.
Ubuntu 10.04 LTS, OpenOffice 3.2
Re: "CASE WHEN" syntax error
Szóval: a Te egyik megoldásod szerint csináltam meg és a dátumot is bekéri így. Az "AfaKulcs"-nak adtam alapértelmezett értéket, hogy ne kelljen mindig beütnöm az űrlapon. Köszönöm a segítséget!
Ettől függetlenül szükségem lesz még a CASE WHEN használatára, így nem zárom le a témát, hátha valaki tudja.
Üdv.
boncsa
Ettől függetlenül szükségem lesz még a CASE WHEN használatára, így nem zárom le a témát, hátha valaki tudja.
Üdv.
boncsa
Ubuntu 10.04 LTS, OpenOffice 3.2