Toon posts:

[SQL/ASP/VFP] Error 800004005 bij GROUP BY

Pagina: 1
Acties:
  • 209 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Windows 2003 SBS / IIS / (OLE DB Provider for) Visual FoxPro

in mijn ASP code haal ik data uit een visual foxpro tabel. de query werkt prima, alleen bij het gebruiken van GROUP BY krijg ik de volgende error
Microsoft OLE DB Provider for Visual FoxPro error '80004005'
SQL: GROUP BY clause is missing or invalid.

/test.asp, line 22
mijn query:
SELECT TRIM(art_code) AS art_code, TRIM(art_desc1) AS art_desc1, NTOM(px_sell) AS px_sell, unit_size, TRIM(r_uitv) AS r_uitv, TRIM(r_kleur) AS r_kleur FROM db\usr_val, db\article WHERE r_webshop = .t. AND r_coll1 != '' AND r_coll1 = uv_code AND ul_code = 'COLLECTIE' AND r_cat = '"&cat&"' AND r_coll1 = '"&col&"' ORDER BY art_desc1 GROUP BY art_desc1, r_uitv;
IUSR heeft lees-rechten op de tabel. zonder GROUP BY werkt de query ook prima.

en ja, ik heb uitgebreid gezocht naar de oorzaak van het probleem. ik weet wat de error betekent, het is niet ongebruikelijk, maar ik krijg het probleem niet opgelost.

[ Voor 6% gewijzigd door Verwijderd op 02-01-2005 13:19 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:00
Wat doet de functie NTOM ?
Waarom doe je een GROUP BY, als NTOM geen aggregate functie is, dan heeft een GROUP BY helemaal geen nut, en is het logisch dat je die foutmelding krijgt. (Nouja, logisch.... GROUP BY is dan ook onverwacht en onnodig).

https://fgheysels.github.io/


Verwijderd

Topicstarter
doen we het toch zonder NTOM :)
SELECT TRIM(art_code) AS art_code, TRIM(art_desc1) AS art_desc1, px_sell, unit_size, TRIM(r_uitv) AS r_uitv, TRIM(r_kleur) AS r_kleur FROM db\usr_val, db\article WHERE r_webshop = .t. AND r_coll1 != '' AND r_coll1 = uv_code AND ul_code = 'COLLECTIE' AND r_cat = '"&cat&"' AND r_coll1 = '"&col&"' ORDER BY art_desc1 GROUP BY art_desc1, r_uitv;
geeft de zelfde error

[ Voor 25% gewijzigd door Verwijderd op 02-01-2005 13:31 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:00
Je hebt dus helemaal geen GROUP BY clause nodig.
Op wat wil je nl. gaan groeperen ? Nergens, want je hebt nergens een 'agregaat-column' die ervoor zorgt dat je moet groeperen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
hoe zou het dan wel moeten? van een dbms als mysql ben ik nl gewend dat iets als "SELECT * FROM table GROUP BY id" geen probleem zou moeten zijn, maar VFP denkt er dus blijkbaar anders over?

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:00
Als je geen aggregate column nodig hebt (zoals een SUM(), AVG(), COUNT(), .... ), dan heb je ook geen GROUP BY nodig.
Op wat zou je anders willen gaan groeperen ? Je hebt niets waarvoor je een groep nodig hebt.

Wat wil je dan wel als uitkomst, of wat verwacht je dan als resultaat ?

Dat het in MySQL wel kan, is omdat MySQL braq is.

https://fgheysels.github.io/


Verwijderd

Topicstarter
ik wil groeperen op art_desc1 (artikelomschijving) en r_uitv (uitvoering)

SELECT voornaam FROM table

voornaam
Hans
Hans
Piet
Hans
Piet
Hans
Hans
Hans
Piet
Hans

SELECT voornaam FROM table GROUP BY voornaam

Hans
Piet

zo moeilijk moet het toch niet zijn lijkt me toch? DISTINCT kan ik overigens weinig mee in mijn query

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:00
Dat is niet groeperen, je wil enkel de unieke items en dat moet je idd met een distinct doen.
Echter, een distinct werkt op row-niveau, en aangezien je meerdere velden selecteerd, zal dat idd niet zo goed werken.

Je maakt trouwens een denkfout: als je enkel de unieke artikel-omschrijvingen en uitvoeringen wilt zien (wat lukt met een distinct), waarom selecteer je dan nog die andere velden ?
Als je meerdere artikels hebt, met dezelfde uitvoering en omschrijving, maar met verschillende waarden voor die andere velden, hoe moet je DBMS dan beslissen voor welk record hij die waarden moet tonen ?
Stel:
code:
1
2
3
artikel omschr  uitvoering    extra veld
melp              uitv1            bliep
melp              uitv1            extra


hoe moet het DBMS nu weten of hij bliep of extra moet tonen als extra veld ?

[ Voor 3% gewijzigd door whoami op 02-01-2005 16:44 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
ok, wel distinct dus.

ik wil niet enkel de artikelomschrijving en uitvoering zien, ik wil dat de waarden omschrijving+uitvoering uniek uit de tabel gehaald worden, maar de andere velden (prijs, verkoopeenheid etc) wil ik er natuurlijk ook bij hebben

ik moet dus krijgen:

code:
1
2
3
4
5
artikelomschr   uitvoering     prijs    verkooopeenheid
vork            standaard      1,00      6
vork            speciaal       1,50      6
lepel           standaard      1,00      2
lepel           speciaal       3,00      3


er staan in de tabel nog veel meer standaard vorken, maar ik wil er maar 1 ophalen uit de tabel

[ Voor 4% gewijzigd door Verwijderd op 02-01-2005 17:21 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:00
En wat wil je dan tonen voor 'prijs en verkoopeenheid' van die andere standaard-vorken ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
alle standaard vorken hebben de zelfde prijzen en de zelfde verkoopeenheden. ik wil echter maar 1 standaard vork opgehaald zien

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:00
Verwijderd schreef op zondag 02 januari 2005 @ 17:37:
alle standaard vorken hebben de zelfde prijzen en de zelfde verkoopeenheden. ik wil echter maar 1 standaard vork opgehaald zien
Dan moet een distinct werken.

https://fgheysels.github.io/


Verwijderd

Topicstarter
bijna, ik zit alleen nog met die art_code (primaire sleutel) in me maag die gebruikt wordt voor de plaatjes bij artikelen ([art_code].jpg). distinct werkt dan niet best meer

  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 09:20
Verwijderd schreef op zondag 02 januari 2005 @ 17:47:
bijna, ik zit alleen nog met die art_code (primaire sleutel) in me maag die gebruikt wordt voor de plaatjes bij artikelen ([art_code].jpg). distinct werkt dan niet best meer
Dan pak je toch bijv. max(art_code) of een andere aggregate functie ?

Was advocaat maar vindt het juridische nog steeds leuk. Doet tegenwoordig iets in de metaal.


Verwijderd

Topicstarter
edit: dit was geen probleem

[ Voor 101% gewijzigd door Verwijderd op 06-01-2005 16:42 ]


Verwijderd

Topicstarter
DISTINCT werkt nu prima, maar de MIN(art_code) krijg ik niet aan de praat. art_code is de PK, maar ik hoef slechts 1 waarde per uniek koppel omschrijving/uitvoering te hebben. de art_code is slechts bedoeld voor fotonamen.

dit pakt ie iig goed:

SQL:
1
2
3
SELECT DISTINCT TRIM(art_desc1) + ' ' + r_uitv + ' ' + r_eenheid AS art_desc1
FROM db\article
ORDER BY art_desc1;


nu de art_code er nog in, wat zoiets zal worden (van wat ik van bovenstaande uitleg af heb geleid):

SQL:
1
2
3
4
SELECT DISTINCT MIN(art_code) AS art_code, TRIM(art_desc1) + ' ' + r_uitv + ' ' + r_eenheid AS art_desc1
FROM db\article
GROUP BY art_code
ORDER BY art_desc1;


hier blijft error 80004005 de kop op steken

[ Voor 12% gewijzigd door Verwijderd op 06-01-2005 16:59 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

In je openingspost was het sowieso fout dat je GROUP BY en ORDER BY verkeerdom had staan, maar ik vermoed dat je probleem op het moment is dat ie geen idee heeft wat ie moet groeperen of sorteren: als je MIN(art_code) AS art_code doet heb je natuurlijk een ambiguiteit van jewelste. Fix die aliasen eens, dat zal al veel oplossen.

En plaats je code trouwens aub tussen [code=sql] en [/code] tags, dat maakt het een stuk leesbaarder :)

Professionele website nodig?

Pagina: 1