Avatar billede hemberg Forsker
21. april 2012 - 17:18 Der er 11 kommentarer og
1 løsning

SQL igen igen, access db

Er ved at blive tosset.

Har en tabel med 2 kollonner

kollonne1      kollonne2
dåse              33
dåse              50
dåse              25
flaske            25
flaske            33
karton          100
karton            50

jeg vil gerne have et RS bestående af den af hver emballage med det højeste indhold. Altså:

dåse              50
flaske            33
karton            100

har prøvet

select kolonne1, MAX(kolonne2) GROUP BY kolonne1

men den gik ikke. Og kan ikke finde den gyldne SQL. Jeg kan heller ikke få det til at virke med DISTINCT.

Nogen ideer?
Avatar billede cpufan Juniormester
21. april 2012 - 17:47 #1
Hvad med:
Select distinct kolonne1, max(kolonne2)
Avatar billede mortvader Nybegynder
21. april 2012 - 18:10 #2
Ved ikke om man kan lave een sql sætning der kan løse det.

Jeg ville nok hente distinct kolonne1 i et RS.
Løbe igennem det, og hente max kolonne2 derfra.
Avatar billede hemberg Forsker
21. april 2012 - 18:22 #3
> cpufan: det virker ikke.

> mortvader: havde tænkt den løsning, men kan dæleme ikke lige se det for mig. Kan du evt. give et eksempel.
Avatar billede mortvader Nybegynder
21. april 2012 - 18:28 #4
(ikke testet)

set rs=conn.execute("select distinct kol1 from tabel")
while not rs.eof
  set maxrs=conn.execute("select max(kol2) as v from tabel where kol1='"&rs("kol1")&"'")
  response.write rs("kol1")&" = "&maxrs("v")&"<br>"
  rs.movenext
wend
rs.close
Avatar billede mortvader Nybegynder
21. april 2012 - 18:29 #5
hov:
efter response.write linien:

maxrs.close
Avatar billede hemberg Forsker
21. april 2012 - 18:45 #6
>mortvader . prøver lige en gang i aften.
Avatar billede cpufan Juniormester
21. april 2012 - 22:14 #7
set rs=conn.execute("select distinct kol1 from tabel")
while not rs.eof
  set maxrs=conn.execute("select max(kol2) as v from tabel where kol1='"&rs("kol1")&"'")
  response.write rs("kol1")&" = "&maxrs("v")&"<br>"
  rs.movenext
wend
rs.close
bør i hvert tilfælde virke
Avatar billede hemberg Forsker
21. april 2012 - 22:30 #8
Hmmm. Det gør det bare af en eller anden grund ikke. Må nok op med kilde koden. Men det bliver først i morgen.

Indtil vidre tak for forsøget.
Avatar billede hemberg Forsker
22. april 2012 - 10:51 #9
OK folkens tid til kildekode

dbPath = "c:\inetpub\db\acm_new.mdb"
set whtConn = server.createobject("adodb.connection")
whtConn.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & dbPath
set newrs=whtConn.execute("select distinct series from series")
while not newrs.eof
  set maxrs=whtConn.execute("select max(season) as v from tabel where series='"&newrs("series")&"'")
  response.write newrs("series")&" = "&maxrs("v")&"<br>"
  maxrs.close
  newrs.movenext
wend
newrs.close

Og ja, det er rigtigt at både tabel og kolonne hedder series. Har prøvet trixet med at putte [] omkring tabelnavnet.
men kan ikke få dette til at virke.
Avatar billede hemberg Forsker
22. april 2012 - 10:59 #10
UPS:

set maxrs=whtConn.execute("select max(season) as v from tabel where series='"&newrs("series")&"'")

er selvfølgelig

set maxrs=whtConn.execute("select max(season) as v from series where series='"&newrs("series")&"'")
Avatar billede hemberg Forsker
22. april 2012 - 11:09 #11
Update -  Har fået koden til at virke. Og fundet problemet. Det var i databasen problemet var.

Jeg vil gerne angive værdierne 1, 2, 3 OSV. 01, 02, 03. Og af en eller anden grund ville access ikke acceptere det og rettede automatisk til ét ciffer. Så troede manden han var smart og lavede feltet om til notat eller text feldt. Og voila så blev værdierne registreret som 01, 02. Men nej det var han ikke...LOL

>mortvader læg et svar og kender du for øvrigt en løsning så jeg kan angive værdierne som 01, 02 osv i access. Det er lidt irriterende og skulle indsætte det nul hver gang.
Avatar billede mortvader Nybegynder
22. april 2012 - 15:44 #12
Nej jeg kender ikke en metode i access til foranstillede nuller.

Men i asp kan du bruge den her lille function: (heller ikke testet)

function padzero(arg)
  if len(abs(padzero))=1 then
    padzero="0"&arg
  else
    padzero=arg
  end if
  if arg<0 then padzero="-"&padzero
  padzero=clng(padzero)
end function
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
Kurser inden for grundlæggende programmering

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