|
| Fejl ved SELECT DISTINCT Fra : Steen Eiler Jørgense~ |
Dato : 17-01-03 08:32 |
|
Jeg prøver at køre den relativt simple query:
SELECT DISTINCT titel FROM sider
og får fejlmeddelelsen
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] Cannot include Memo, OLE, or
Hyperlink Object when you select unique values (titel).
Wa æ gal? Jeg kan næsten regne ud, at man bare ikke kan bruge SELECT
DISTINCT med Memo, men hvad dælen gør en klog mand så?
--
Steen Eiler Jørgensen
"Time has resumed its shape. All is as it was before.
Many such journeys are possible. Let me be your gateway."
| |
Steen Eiler Jørgense~ (17-01-2003)
| Kommentar Fra : Steen Eiler Jørgense~ |
Dato : 17-01-03 08:38 |
|
....og lige en hurtig en til: Jeg vil gerne have at vide, hvor mange sider,
der har en bestemt værdi i feltet "modifiedby" (som er af typen "text").
Derfor ser min query sådan ud:
SELECT DISTINCT modifiedby,count(modifiedby) AS antal FROM sider
men så får jeg denneher:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that
does not include the specified expression 'modifiedby' as part of an
aggregate function.
Hvad er nu det for noget snask?
--
Steen Eiler Jørgensen
"Time has resumed its shape. All is as it was before.
Many such journeys are possible. Let me be your gateway."
| |
Torben (17-01-2003)
| Kommentar Fra : Torben |
Dato : 17-01-03 09:50 |
|
>
> SELECT DISTINCT modifiedby,count(modifiedby) AS antal FROM sider
>
> men så får jeg denneher:
>
> Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
> [Microsoft][ODBC Microsoft Access Driver] You tried to execute a query
that
> does not include the specified expression 'modifiedby' as part of an
> aggregate function.
>
> Hvad er nu det for noget snask?
Hej Steen!
Dit sidste problem kan jeg muligvis hjælpe dig med.
Når du bruger en funktion som count(), så skal du også have denne inkluderet
i en "order by".
Det tekniske kan jeg ikke lige i skrivende stund redegøre for. Hvis du
retter din sql til så den ser ud som f.eks:
SELECT DISTINCT modifiedby, count(modifiedby) AS antal
FROM sider
ORDER BY count(modifiedby), modifiedby
Så skulle jeg mene at det virker.
M.v.h.
Torben Philippsen
| |
Torben (17-01-2003)
| Kommentar Fra : Torben |
Dato : 17-01-03 09:57 |
|
> SELECT DISTINCT modifiedby, count(modifiedby) AS antal
> FROM sider
> ORDER BY count(modifiedby), modifiedby
RETTELSE:
Du skal bruge GROUP BY istedet for ORDER BY - jeg bytter altid rundt på de
to.
M.v.h.
Torben
| |
Steen Eiler Jørgense~ (17-01-2003)
| Kommentar Fra : Steen Eiler Jørgense~ |
Dato : 17-01-03 11:13 |
|
"Torben" <torbenph@worldonline.dk> wrote in message
news:3e27c516$0$71701$edfadb0f@dread11.news.tele.dk...
> > SELECT DISTINCT modifiedby, count(modifiedby) AS antal
> > FROM sider
> > ORDER BY count(modifiedby), modifiedby
>
> RETTELSE:
>
> Du skal bruge GROUP BY istedet for ORDER BY - jeg bytter altid rundt på de
> to.
Desværre nej. Nu ser min query således ud:
SELECT DISTINCT modifiedby,count(modifiedby) AS antal FROM sider GROUP BY
count(modifiedby),modifiedby
hvilket resulterer i:
Cannot have aggregate function in GROUP BY clause (count(modifiedby)).
--
Steen Eiler Jørgensen
"Time has resumed its shape. All is as it was before.
Many such journeys are possible. Let me be your gateway."
| |
Jens Gyldenkærne Cla~ (17-01-2003)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 17-01-03 11:10 |
|
Steen Eiler Jørgensen skrev:
> ...og lige en hurtig en til: Jeg vil gerne have at vide, hvor
> mange sider, der har en bestemt værdi i feltet "modifiedby"
> (som er af typen "text"). Derfor ser min query sådan ud:
>
> SELECT DISTINCT modifiedby,count(modifiedby) AS antal FROM
> sider
Du skal ikke bruge DISTINCT her, men GROUP BY i stedet:
SELECT modifiedby, count(*) as antal
FROM sider
GROUP BY modifiedby
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Steen Eiler Jørgense~ (17-01-2003)
| Kommentar Fra : Steen Eiler Jørgense~ |
Dato : 17-01-03 11:21 |
|
"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote
> Du skal ikke bruge DISTINCT her, men GROUP BY i stedet:
>
> SELECT modifiedby, count(*) as antal
> FROM sider
> GROUP BY modifiedby
Ja, se, nu nærmer vi os! Jeg får ganske rigtigt modifiedby og hvert antal af
modifiedby, men de er sorteret alfabetisk efter modifiedby. Jeg ville jo
helst have det højeste antal øverst, osv. Men
SELECT modifiedby, count(*) as antal FROM sider GROUP BY antal,modifiedby
resulterer i
Too few parameters. Expected 1.
og
SELECT modifiedby, count(*) as antal FROM sider GROUP BY count(*),modifiedby
resulterer i
Cannot have aggregate function in GROUP BY clause (count(*)).
--
Steen Eiler Jørgensen
"Time has resumed its shape. All is as it was before.
Many such journeys are possible. Let me be your gateway."
| |
Jens Gyldenkærne Cla~ (17-01-2003)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 17-01-03 11:44 |
|
Steen Eiler Jørgensen skrev:
>> SELECT modifiedby, count(*) as antal
>> FROM sider
>> GROUP BY modifiedby
>
> Ja, se, nu nærmer vi os! Jeg får ganske rigtigt modifiedby og
> hvert antal af modifiedby, men de er sorteret alfabetisk efter
> modifiedby. Jeg ville jo helst have det højeste antal øverst,
> osv.
Sortering foregår med ORDER BY - ligesom gruppering foregår med
GROUP BY:
SELECT modifiedby, count(*) as antal
FROM sider
GROUP BY modifiedby
ORDER BY antal DESC
(det skulle virke i Access - andre steder hvor man ikke kan
genbruge et aliasfelt skal man skrive ORDER BY count(*) DESC)
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Steen Eiler Jørgense~ (17-01-2003)
| Kommentar Fra : Steen Eiler Jørgense~ |
Dato : 17-01-03 13:10 |
|
"Jens Gyldenkærne Clausen" <jc@dmf.dk> wrote
> Sortering foregår med ORDER BY - ligesom gruppering foregår med
> GROUP BY:
>
> SELECT modifiedby, count(*) as antal
> FROM sider
> GROUP BY modifiedby
> ORDER BY antal DESC
Okay - jeg tilstår: jeg aner ikke, hvad GROUP BY gør
> (det skulle virke i Access - andre steder hvor man ikke kan
> genbruge et aliasfelt skal man skrive ORDER BY count(*) DESC)
Nej, kun hvis jeg bruger count(*) virker det - ellers får jeg en "Too few
parameters"
Så nu virker det! Tusind tak for hjælpen
Mvh Steen
--
Steen Eiler Jørgensen
"Time has resumed its shape. All is as it was before.
Many such journeys are possible. Let me be your gateway."
| |
Jens Gyldenkærne Cla~ (17-01-2003)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 17-01-03 13:28 |
|
Steen Eiler Jørgensen skrev:
>> Sortering foregår med ORDER BY - ligesom gruppering foregår
>> med GROUP BY:
> Okay - jeg tilstår: jeg aner ikke, hvad GROUP BY gør
Læs ovenfor ;). Gruppering samler et recordset omkring en eller
flere feltværdier.
SELECT modifiedby
FROM sider
GROUP BY modifiedby
- giver én record for hver værdi af modifiedby (i dette tilfælde
præcis som DISTINCT ville have gjort).
Man bruger GROUP BY sammen med aggregatfunktioner - fx SUM, COUNT,
MIN og MAX - der alle er funktioner der virker på flere rækker ad
gangen. Bruger man GROUP BY i en forespørgsel skal alle felter i
select-listen enten være med i GROUP BY-linjen eller også være
behandlet af en aggregatfunktion.
Ugyldigt eksempel:
SELECT modifiedby, modifiedtime
FROM sider
GROUP BY modifiedby
- vil ikke virke, fordi modifiedtime hverken er med i GROUP BY-
linjen eller indkapslet af en aggregatfunktion.
Gyldige eksempler:
SELECT modifiedby, MAX(modifiedtime)
FROM sider
GROUP BY modifiedby
SELECT modifiedby, modifiedtime, count(*)
FROM sider
GROUP BY modifiedby, modifiedtime
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Steen Eiler Jørgense~ (17-01-2003)
| Kommentar Fra : Steen Eiler Jørgense~ |
Dato : 17-01-03 14:24 |
|
"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote
> Man bruger GROUP BY sammen med aggregatfunktioner - fx SUM, COUNT,
> MIN og MAX - der alle er funktioner der virker på flere rækker ad
> gangen. Bruger man GROUP BY i en forespørgsel skal alle felter i
> select-listen enten være med i GROUP BY-linjen eller også være
> behandlet af en aggregatfunktion.
Ach so... Det er da smart - det vil jeg til at bruge noget mere
Mange tak for hjælpen.
Mvh Steen
--
Steen Eiler Jørgensen
"Time has resumed its shape. All is as it was before.
Many such journeys are possible. Let me be your gateway."
| |
///JJ (17-01-2003)
| Kommentar Fra : ///JJ |
Dato : 17-01-03 10:33 |
|
"Steen Eiler Jørgensen" <oz1sejREMOVETHIS@get2net.dk> wrote in message
news:b08bc2$3vf$1@sunsite.dk...
> Jeg prøver at køre den relativt simple query:
>
> SELECT DISTINCT titel FROM sider
>
> og får fejlmeddelelsen
>
> Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
> [Microsoft][ODBC Microsoft Access Driver] Cannot include Memo, OLE, or
> Hyperlink Object when you select unique values (titel).
>
> Wa æ gal? Jeg kan næsten regne ud, at man bare ikke kan bruge SELECT
> DISTINCT med Memo, men hvad dælen gør en klog mand så?
Har du prøvet at type-cast'e dit memo til varchar eller måske text?
select distinct cast(titel as varchar(1000)) from sider
mvh
///JJ
| |
Steen Eiler Jørgense~ (17-01-2003)
| Kommentar Fra : Steen Eiler Jørgense~ |
Dato : 17-01-03 11:17 |
|
"///JJ" <jesperhn@nospamtdcadsl.dk> wrote in message
news:b08irc$2kfm$1@news.cybercity.dk...
> Har du prøvet at type-cast'e dit memo til varchar eller måske text?
>
> select distinct cast(titel as varchar(1000)) from sider
Hm, den kendte jeg godt nok ikke. Men queryen
SELECT DISTINCT CAST(titel AS varchar(1000)) FROM sider
resulterer i
Syntax error (missing operator) in query expression 'CAST(titel AS
varchar(1000))'.
Fik jeg sagt, at det er en Access2000-db? (Hvis det spiller nogen
trille...?)
--
Steen Eiler Jørgensen
"Time has resumed its shape. All is as it was before.
Many such journeys are possible. Let me be your gateway."
| |
Jens Gyldenkærne Cla~ (17-01-2003)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 17-01-03 11:08 |
|
Steen Eiler Jørgensen skrev:
> SELECT DISTINCT titel FROM sider
Er titel et memofelt?
> Wa æ gal? Jeg kan næsten regne ud, at man bare ikke kan bruge
> SELECT DISTINCT med Memo, men hvad dælen gør en klog mand så?
Har du brug for at titel skal være af typen memo? Hvor lange titler
gemmer du?
Jeg kan ikke lige huske om left kan bruges på et memo-felt, men
ellers kan du prøve
SELECT DISTINCT LEFT(titel, 255) as titel FROM sider
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Steen Eiler Jørgense~ (17-01-2003)
| Kommentar Fra : Steen Eiler Jørgense~ |
Dato : 17-01-03 11:25 |
|
"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote
> Er titel et memofelt?
Jeps, og jeg kan ikke lige huske, hvorfor jeg lavede det til et memofelt,
men såvidt jeg erindrer, var der en god grund til det
> Har du brug for at titel skal være af typen memo? Hvor lange titler
> gemmer du?
Ja, det er jo det, formodentlig ikke over 255 tegn, men jeg kan ikke huske
det.
> Jeg kan ikke lige huske om left kan bruges på et memo-felt, men
> ellers kan du prøve
>
> SELECT DISTINCT LEFT(titel, 255) as titel FROM sider
Hm, næ, jeg får en
Circular reference caused by alias 'titel' in query definition's SELECT
list.
--
Steen Eiler Jørgensen
"Time has resumed its shape. All is as it was before.
Many such journeys are possible. Let me be your gateway."
| |
Jens Gyldenkærne Cla~ (17-01-2003)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 17-01-03 11:40 |
|
Steen Eiler Jørgensen skrev:
>> Har du brug for at titel skal være af typen memo? Hvor lange
>> titler gemmer du?
>
> Ja, det er jo det, formodentlig ikke over 255 tegn, men jeg
> kan ikke huske det.
Memofelter er, som du nu har erfaret, besværlige at arbejde med på
mange områder. Man kan fx ikke søge på et memofelt.
Hvis det ikke er tvingende nødvendigt at bruge datatypen så hold
dig til tekst.
>> SELECT DISTINCT LEFT(titel, 255) as titel FROM sider
>
> Hm, næ, jeg får en
>
> Circular reference caused by alias 'titel' in query
> definition's SELECT list.
O.k. - men den er jo nem at slippe af med. Skift aliasset ud i
sætningen (altså "as kortTitel" eller lignende). Access og MSSQL
opfører sig forskelligt her.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
|
|