Avatar billede bertelsenbo Nybegynder
30. juli 2010 - 10:10 Der er 15 kommentarer og
1 løsning

SQL SELECT fejl "expected lexical element not found: from"

Hej eksperter,

Jeg har lavet en ODBC forbindelse fra Excel til et system vi har der hedder Remedy (Arsystem). Det hele fungerer fint, men når jeg forsøger at lave følgende SELECT går det galt, og jeg ved ikke hvorfor.

SELECT "HPD:Solutions".Category, "HPD:Solutions"."Count"
FROM "HPD:Solutions" "HPD:Solutions"
WHERE ("HPD:Solutions".Type='Monitor')

Fejlen er: "expected lexical element not found from"

Det er "Count" kolonnen (med og uden anførselstegn) der laver rod i det hele. Ændrer jeg min SELECT-statement til en anden kolonne end Count, så kommer resultatet prompte.

Først troede jeg at det var fordi feltet kunne være null, men efter adskillige forsøg med ISNULL("HPD:Solutions"."Count",'0') osv. er jeg ikke kommet videre.

Jeg har dog en mistanke om at det er ordet "Count" der i bogstavligsteforstand er til gene. Er det mon fordi Count er et reserveret udtryk i SQL? Hvis ændrer kolonne-navnet til noget der ikke eksisterer får bare en alm "Din kolonne findes ikke"-fejl.
Avatar billede michael_stim Ekspert
30. juli 2010 - 10:22 #1
COUNT er reserveret ja. I alle databaser.

SELECT COUNT(*)...
Avatar billede bertelsenbo Nybegynder
30. juli 2010 - 10:29 #2
Jeg har prøvet SELECT "HPD:Solutions".Category, "HPD:Solutions"."Count(*)"
FROM "HPD:Solutions" "HPD:Solutions"
WHERE ("HPD:Solutions".Type='Monitor')

med og uden anførselstegn omkring, men uden held.
Avatar billede bertelsenbo Nybegynder
30. juli 2010 - 10:40 #3
Hvordan undgår jeg at den tror jeg mener COUNT som i det reserverede keyword? Jeg har jo forsøgt med "-tegn for at angive det er en identifier. Jeg har også prøver med \, /, @ og @@ uden held.
Avatar billede michael_stim Ekspert
30. juli 2010 - 10:42 #4
SELECT COUNT(*)... Var bare for at vise dig hvordan man brugte den indbyggede funktion.

Ved ikke hvilken database du bruger men man kan bruge `count` i MySQL og [count] i mssql.
Avatar billede bertelsenbo Nybegynder
30. juli 2010 - 10:47 #5
Well, det er vha. en ODBC driver og SQL statements ryger tastet ind i "Microsoft Query" via. Excel. Det er lidt kringlet.

Hverken `count` og [count] gør en forskel desværre :(
Avatar billede teepee Nybegynder
30. juli 2010 - 11:32 #6
Du skal lave en group by category før du kan få både category og count ud i samme række
Avatar billede bertelsenbo Nybegynder
30. juli 2010 - 12:18 #7
Kan du give et eksempel på hvordan jeg gør det ud fra ovenstående SQL statement?
Og vil det overhoved ændre noget når den stadig tror at "count" er et reserveret keyword?
Avatar billede bertelsenbo Nybegynder
30. juli 2010 - 12:22 #8
Har nu prøvet med:
SELECT "HPD:Solutions".Category, "HPD:Solutions"."Count"
FROM "HPD:Solutions" "HPD:Solutions"
WHERE ("HPD:Solutions".Type='Monitor') OR ("HPD:Solutions".Type='Laptop')
GROUP BY "HPD:Solutions".Category


Den når slet ikke til "GROUP BY eftersom den SQL-parseren flipper ud over ordet Count inden den når så langt. Ville ønske jeg vidste hvilke tegn jeg skulle bruge for at den fattede Count er en identifier og ikke et keyword.
Avatar billede teepee Nybegynder
30. juli 2010 - 14:21 #9
Du kan ikke bruge .Count du skal bruge count(*) ANSI-SQL på ODBC.
Man kan ikke have en gruppefunktion i en række sammen med værdier der ikke er i gruppefunktion....

SELECT "HPD:Solutions".Category, "HPD:Solutions".Count(*)
FROM  "HPD:Solutions" "HPD:Solutions"
WHERE  "HPD:Solutions".Type='Monitor'
GROUP BY "HPD:Solutions".Category;
Avatar billede bertelsenbo Nybegynder
30. juli 2010 - 14:46 #10
Teepee - jeg er lidt i tvivl om hvorvidt du forstår min udfordring eller om jeg forstår dit svar.

Count er navnet på en kolonne jeg prøver at få værdierne ud af. Jeg prøver ikke at bruge Count funktionen i SQL.

Når jeg forsøger med ovenstående SQL-statement siger den blot:
"Incorrect column expression: '"HPD:Solutions".Count(*)'."

Den column jeg forsøger at hente hedder "Count", hvilket jeg ikke kan få lov til eftersom Count er et reserveret keyword. Dog plejer man at kunne skrive det i anførselstegn så SQL opfatter det som en identifier for den pågældende column. Dog virker det ikke, men det er det jeg vil have hjælp til.

Jeg kan sagtens hente adskillige andre columns ud på én gang, UDEN at have GROUP BY.

F.eks. virker dette statement fint:
SELECT "HPD:Solutions".Category, "HPD:Solutions"."User id", "HPD:Solutions"."Type*", "HPD:Solutions".Submitter
FROM "HPD:Solutions" "HPD:Solutions"
WHERE ("HPD:Solutions".Type='Monitor') OR ("HPD:Solutions".Type='Laptop')
Avatar billede teepee Nybegynder
30. juli 2010 - 22:31 #11
Ok, det har jeg totalt misset. Sorry.

Dem i dobbeltplinger skulle være ok, men måske der går noget galt på returen. Prøv at give kolonnen et alias i selecten også (ligesom du har gjort med tabellen)

Ellers tror jeg at du er ude i at omdøbe kolonnen, evt. lave et view på databasen hvor du bruger et ikke reserveret navn.
Avatar billede bertelsenbo Nybegynder
31. juli 2010 - 13:35 #12
Teepee, kanon idé med et column alias :)

Det prøver jeg på mandag og vender tilbage.

Problemet er at jeg ikke har andet end læseadgang til denne DB og kan ikke lave navngivningen på kolonnen om.
Avatar billede bertelsenbo Nybegynder
02. august 2010 - 09:06 #13
Det ser ikke ud til at virke - den æder slet ikke min column alias. Og jeg bliver ved med at modtage den samme fejl. "expected lexical element not found: from" :(

Beklager.
Avatar billede bertelsenbo Nybegynder
03. august 2010 - 10:12 #14
Jeg løste det i stedet ved at tilgå min DB fra access da kan finde ud af håndtere det korrekt. Jeg importerede DB via en wizard og fik på den måde alle columns.

Teepee & michael_stim, i får 100 point hver som tak for hjælpen (hvis michael lige melder sig på banen og laver et svar jeg kan tildele point).
Avatar billede michael_stim Ekspert
04. august 2010 - 11:25 #15
Havde ikke set denne, sorry. Men jeg samler ikke på point, ellers tak ;o)
Avatar billede bertelsenbo Nybegynder
04. august 2010 - 12:59 #16
Alright :) så fik teepee dem.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester