Avatar billede Slettet bruger
11. februar 2002 - 13:22 Der er 12 kommentarer og
3 løsninger

Avanceret SQL

Jeg skal have lavet en SQl sætning der indeholder en udregning. Jeg har en tabel (periode) der bl.a indeholder et felt der hedder UGE og et felt der hedder PRIS. Det drejer sig om biludlejning. Hvis en bruger fx indtaster at han vil leje en bil fra Uge 1, og så 2 uger frem til en given pris, så skal sætningen finde det ID hvor fx Prisen for Uge1 + Uge2 < Den pris han indtastede. Ved godt det er dårligt formuleret :)
Avatar billede coltau Juniormester
11. februar 2002 - 13:32 #1
Mig ikke forstå. ?
Hvilke felter har du og hvad skal der udregnes. ?
Avatar billede jhc Nybegynder
11. februar 2002 - 13:50 #2
Altså hvis jeg forstår dig rigtig så har en en tabel som indeholder prisen for en given uge(uge1,uge2 .. osv.) - hvor der pr. uge kan være forskellige priser. Men ????
Avatar billede sone Nybegynder
11. februar 2002 - 13:59 #3
i en SELECT kan du sagtens regne:

SELECT (felt1-felt3)*felt4, navn FROM .......
Avatar billede jhc Nybegynder
11. februar 2002 - 14:06 #4
Men det ville være nemmere at stykke en SQL-streng sammen hvis man vidste noget om dit tabel-design. Hvad er databasem lavet i Access???
Avatar billede Slettet bruger
11. februar 2002 - 14:06 #5
>Sonne, kan man? Jeg tester lige. Det skal jo være 2 poster der skal lægges sammen. ´Men du har nok ret, tester lige.....
Avatar billede Slettet bruger
11. februar 2002 - 14:13 #6
Ehm, nej tror ikke lige den er god nok. Her er min kode (den funger) for hvis brugeren kun skulle leje bilen i 1 uge.

SQL = "SELECT Car_Id FROM Periode WHERE (Week = "& Uge & ") and (Price_Euro <= "& MAXPRIS &")" 

Uge er her = 1,
Det den skal gøre er at ligge Prisen for Uge(1) sammen med Prisen for Uge(2) og så checke om det er mindre en MAXPRIS. Fatter det ikke, hvis i kan finde ud af det, må i MEGET gerne skrive hvordan sætningen så skulle se ud.
Avatar billede Slettet bruger
11. februar 2002 - 14:15 #7
Databasen er lavet i Access
Avatar billede kennethrisum Nybegynder
12. februar 2002 - 14:48 #8
Dette skulle virke:
SQL = "SELECT Car_Id FROM Periode WHERE (SELECT SUM(Price_Euro) FROM Periode a WHERE (a.Week >= " & Uge1 & ") AND (a.Week <= " & Uge2 & ") AND a.Car_Id = Periode.Car_ID) < " & MAXPRIS

mvh/Kenneth
Avatar billede Slettet bruger
12. februar 2002 - 15:18 #9
Nope, den gider ikke Kenneth
Avatar billede kennethrisum Nybegynder
12. februar 2002 - 15:35 #10
Det virker på min Access2000.

Du kan alternativt bruge:

----KODE----
Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")
Dim SQL

SQL = "SELECT Car_Id, SUM(Price_Euro) AS SumPris FROM Periode WHERE (Week >= " & Uge1 & ") AND (Week <= " & Uge2 & ");"

rs.open SQL,con,2,1
rs.Filter = "SumPris < " & MAXPRIS
----KODE SLUT----

Du har nu et recordset med de poster, der opfylder betingelserne.
Avatar billede Slettet bruger
12. februar 2002 - 16:02 #11
Nope. Den laver lort i det. Er du sikker på at det er den præcise kode, har aldrig selv brugt ";" tegnet i vbscript. Æv hvor er det irriterende :(((((((((
Avatar billede Slettet bruger
12. februar 2002 - 16:06 #12
Error Type:
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 'Car_Id' as part of an aggregate function.
/travel(ny)/test.asp, line 37

Og Car_Id eksisterer i tabellen ???????
Avatar billede kennethrisum Nybegynder
12. februar 2002 - 16:16 #13
Sorry...

Du skal ændre SQL'en til

SQL = "SELECT Car_Id, SUM(Price_Euro) AS SumPris FROM Periode WHERE (Week >= " & Uge1 & ") AND (Week <= " & Uge2 & ") GROUP BY Car_Id;"
Avatar billede coltau Juniormester
12. februar 2002 - 16:18 #14
Som jeg forstår så vil du have et udtræk af de biler der kan udlejes for en bestemt pris eller derunder i en eller fler uger. ?

Så har du brug for en SQL-sætning der ser sådan ud.
SQL = "SELECT Car_Id, Sum(Price_Euro) as SumPris FROM Periode WHERE (Week >= "& Uge1 & ") and (Week <= "& Uge2 & ") and (SumPris <= "& MAXPRIS &") group by car_id"

MEN - ovennævnte sætning kan ikke lade sig gøre. !
derfor er du nødt til at lave et udtræk med alle biler i de uger det drejer sig om og så gennemløbe recordsættet og sortere dem fra der overstiger MAXPRIS.

SQL = "SELECT Car_Id, Sum(Price_Euro) as SumPris FROM Periode WHERE (Week >= "& Uge1 & ") and (Week <= "& Uge2 & ") group by car_id"

do while not RS.EOF
  if (RS("SumPris") <= MAXPRIS then
    '  Den er go' nok
  end if
  RS.MoveNext
loop
Avatar billede Slettet bruger
12. februar 2002 - 16:28 #15
Ok, tror det virker nu, checker lige
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