"CASE WHEN" syntax error

Adatbázis kezelő

"CASE WHEN" syntax error

HozzászólásSzerző: boncsa » 2012. április 28., szombat 17:53

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
Ubuntu 10.04 LTS, OpenOffice 3.2
boncsa
 
Hozzászólások: 9
Csatlakozott: 2012. április 28., szombat 17:44

Re: "CASE WHEN" syntax error

HozzászólásSzerző: Zizi64 » 2012. április 28., szombat 18:02

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...

 Szerkesztett: No, már meg is tettem... 
Sok sikert!
Kovács Tibor (Win7x64Prof/W10x64prof: LO6.1.6;
winPenPack/PortableApps: LO3.3.1-6.2.5, AOO4.1.6
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címe elejének szerkesztésével - tedd hozzá: [Megoldva].
Avatar
Zizi64
Globális moderátorok
 
Hozzászólások: 3437
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: "CASE WHEN" syntax error

HozzászólásSzerző: antiuhu » 2012. április 29., vasárnap 10:34

Ü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:
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]


Máshogy "ábrázolva":
Kód: Egész kijelölése   KinyitásÖsszecsukás
CASE WHEN expr1 THEN v1
          [WHEN expr2 THEN v2]
          [WHEN expr3 THEN v3]
          [...]
          [ELSE v4]
END


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
antiuhu
Önkéntesek
 
Hozzászólások: 194
Csatlakozott: 2008. február 28., csütörtök 23:44

Re: "CASE WHEN" syntax error

HozzászólásSzerző: boncsa » 2012. április 29., vasárnap 12:16

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
Ubuntu 10.04 LTS, OpenOffice 3.2
boncsa
 
Hozzászólások: 9
Csatlakozott: 2012. április 28., szombat 17:44

Re: "CASE WHEN" syntax error

HozzászólásSzerző: antiuhu » 2012. április 29., vasárnap 13:15

Ü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
Kód: Egész kijelölése   KinyitásÖsszecsukás
SELECT CASE WHEN "AfaJelleg" <> '' THEN ( "Brutto" / 127 ) * 27 END AS "Afa", "ID" FROM "TABLA" "AfaJelleg"

Brutto
Kód: Egész kijelölése   KinyitásÖsszecsukás
SELECT CASE WHEN "AfaJelleg" <> '' THEN ( "Brutto" / 127 ) * 100 END AS "Netto", "ID" FROM "TABLA" "AfaJelleg"


Figyelem! A THEN előtt dupla ' jel (Shift+1) van!

Anti
Csatolmányok
CASE-WHEN.odb
CASE-WHEN példa adatbázis
(3.46 KiB) 99 alkalommal.
antiuhu
Önkéntesek
 
Hozzászólások: 194
Csatlakozott: 2008. február 28., csütörtök 23:44

Re: "CASE WHEN" syntax error

HozzászólásSzerző: antiuhu » 2012. április 29., vasárnap 15:53

Üdv!

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.

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:
Kód: Egész kijelölése   KinyitásÖsszecsukás
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   KinyitásÖsszecsukás
| Brutto | Netto  | Afa  |
|1000    |   787,4| 212,6|
|2000    |  1574,8| 425,2|


Anti
antiuhu
Önkéntesek
 
Hozzászólások: 194
Csatlakozott: 2008. február 28., csütörtök 23:44

Re: "CASE WHEN" syntax error

HozzászólásSzerző: boncsa » 2012. április 29., vasárnap 20:34

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
Ubuntu 10.04 LTS, OpenOffice 3.2
boncsa
 
Hozzászólások: 9
Csatlakozott: 2012. április 28., szombat 17:44

Re: "CASE WHEN" syntax error

HozzászólásSzerző: antiuhu » 2012. április 30., hétfő 10:40

Ü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.
Kód: Egész kijelölése   KinyitásÖsszecsukás
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" <> ''


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)
Kód: Egész kijelölése   KinyitásÖsszecsukás
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) 97 alkalommal.
antiuhu
Önkéntesek
 
Hozzászólások: 194
Csatlakozott: 2008. február 28., csütörtök 23:44

Re: "CASE WHEN" syntax error

HozzászólásSzerző: boncsa » 2012. április 30., hétfő 11:55

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
Ubuntu 10.04 LTS, OpenOffice 3.2
boncsa
 
Hozzászólások: 9
Csatlakozott: 2012. április 28., szombat 17:44

Re: "CASE WHEN" syntax error

HozzászólásSzerző: boncsa » 2012. április 30., hétfő 20:47

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:

Kód: Egész kijelölése   KinyitásÖsszecsukás
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


Ez is működik, feltétel szerint kiszámolja a nettót és az áfát:

Kód: Egész kijelölése   KinyitásÖsszecsukás
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


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
Ubuntu 10.04 LTS, OpenOffice 3.2
boncsa
 
Hozzászólások: 9
Csatlakozott: 2012. április 28., szombat 17:44

Re: "CASE WHEN" syntax error

HozzászólásSzerző: antiuhu » 2012. május 1., kedd 10:15

Ü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:
Kód: Egész kijelölése   KinyitásÖsszecsukás
WHERE ("AfaJelleg" = 't' OR "AfaJelleg" = 'k') AND ("Datum" >= '2012-02-01' AND "Datum" <= '2012-06-01') ORDER BY "Datum" ASC


Egyébként olyan fura hibaüzeneteket kapok sql-re, nem lehet, hogy valami kiegészítőm hiányzik?

Szerintem próbáld ki egy másik gépen, ahol biztos minden fent van a tökéletes működéshez.

Anti
antiuhu
Önkéntesek
 
Hozzászólások: 194
Csatlakozott: 2008. február 28., csütörtök 23:44

Re: "CASE WHEN" syntax error

HozzászólásSzerző: boncsa » 2012. május 1., kedd 12:51

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
Csatolmányok
Új adatbázis3.odb
(16.36 KiB) 110 alkalommal.
Ubuntu 10.04 LTS, OpenOffice 3.2
boncsa
 
Hozzászólások: 9
Csatlakozott: 2012. április 28., szombat 17:44

Re: "CASE WHEN" syntax error

HozzászólásSzerző: boncsa » 2012. május 1., kedd 21:18

Megoldottam, de máshogy!

Üdv.
boncsa
Csatolmányok
1_0.odb
(21.46 KiB) 106 alkalommal.
Ubuntu 10.04 LTS, OpenOffice 3.2
boncsa
 
Hozzászólások: 9
Csatlakozott: 2012. április 28., szombat 17:44

Re: "CASE WHEN" syntax error

HozzászólásSzerző: boncsa » 2012. május 2., szerda 10:29

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
Ubuntu 10.04 LTS, OpenOffice 3.2
boncsa
 
Hozzászólások: 9
Csatlakozott: 2012. április 28., szombat 17:44


Vissza: Base

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég