Avatar billede webben Nybegynder
26. januar 2002 - 19:47 Der er 4 kommentarer og
2 løsninger

SQL Sætning søges :)

Halløjsa....

Jeg søger en sjov lille sql sætning som jeg har siddet og bikset lidt med her på det sidste....

Jeg har 3 tabeller:

id, tekst, uge

I min database har lige nu 5 forskellige indlæg.

1, hej, 3
2, hej igen, 5
3, wolla, 2
4, hej igen igen, 7
5, weeee, 9

Ugen vi er i er jo uge 4.

Sql sætningen skal så tage de 5 næste uge frem, dvs til uge 9. Der skal den finde ud af hvilke nogle uger der er skerevet i. Så skal den i dette tilfælde udskrive:

4, 6 og 8... fordi der er skrevet noget i uge 4, 7 og 9

Er der nogle der kan løse dette problem for de lige 100 ekstra point til kassen... Håber at der er nogle friske nogle til at hjælpe mig :)
Avatar billede prh Nybegynder
26. januar 2002 - 20:40 #1
Tror du har lavet en fejl i :
4, 6 og 8... fordi der er skrevet noget i uge 4, 7 og 9

Ifølge din tabel er der kun skrevet i 5, 7, 9 ???

Og hvad vil du så have ud, de uge numre der IKKE er skrevet i, eller
dem der er skrevet ind ?
Avatar billede prh Nybegynder
26. januar 2002 - 20:41 #2
Og nå ja, hvis du vil have de uger der er skrevet i, vil du så have ID'et
for ugerne ud, eller de reelle ugenumre ?
Avatar billede webben Nybegynder
26. januar 2002 - 20:47 #3
jeg vil gerne udskrive de uger som der ikke er skrevet noget i... jeg vil gerne have udskrevet de reelle ugenumre tak
Avatar billede coltau Juniormester
27. januar 2002 - 00:56 #4
Du har ikke skrevet hvordan du vil have dem - så derfor får du dem i et array.

<%
Dim objConn
Dim RS
Dim uger(5)

intUge = 4
for i = 0 to 5: uger(i) = intUge + i: next

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("test.mdb") ' strConn
Set RS = objConn.Execute("select distinct uge from tabeluge where uge>=" & CStr(intUge) & " and uge<=" & CStr(intUge+5))

response.write("uger der findes.<br>")
Do While Not rs.EOF
  response.write(RS("uge") & "<br>")
  uger(RS("uge") - intUge) = 0 ' Uge sættes til 0 fordi den findes.
  rs.MoveNext
Loop
rs.Close
Set rs = Nothing

response.write("uger der ikke findes.<br>")
for i = 0 to 5
  if uger(i) <> 0 then
    response.write(uger(i) & "<br>") ' Uge findes ikke
  end if
next
%>

Jeg tror ikke at du kan lave en SQL-sætning der giver resultatet.
Avatar billede prh Nybegynder
27. januar 2002 - 10:32 #5
Det passer ikke helt coltau, (altså at det ikke kan lade sig gøre)...
Det kræver dog en "ekstra" funktion på en sql 2000'er, eller en ekstra
tabel på sql 7 (sql 7 tricket vil også virke på en sql 2000'er)...

Det du starter med at gøre er at oprette en tabel :

CREATE TABLE [EkspertenUgeNr] (
    [ID] [int] IDENTITY (1, 1) NOT NULL,
    [UgeNr] [int]
    CONSTRAINT [PK_EkspertenUgeNr] PRIMARY KEY  CLUSTERED
    (
        [ID]
    )  ON [PRIMARY]
) ON [PRIMARY]
GO

Så skriver du følgende (op til 53) :
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(1)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(2)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(3)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(4)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(5)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(6)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(7)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(8)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(9)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(10)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(11)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(12)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(13)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(14)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(15)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(16)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(17)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(18)
INSERT INTO EkspertenUgeNr(UgeNr) VALUES(19)

Nu har du så en tabel med alle uge numre der teoretisk kan være...

select top 5
    *
from
    ekspertenugenr
where
    ugenr > 5
    and
    ekspertenugenr.ugenr
    not in (select uge as ugenr from eksperten)
       
Denne sql sætning viser alle uger der ikke er skrevet noget i endnu...

Hvis du vil have den begrænset så den kun viser ugenr der er mellem din
givne startuge, og den sidst indskrevne uge i din tabel (dog maks 5
stadigvæk), så kan du fyre følgende af...

select top 5
    *
from
    ekspertenugenr
where
    ugenr > 5
    and
    ekspertenugenr.ugenr < (select max(uge) as ugenr from eksperten)
    and
    ekspertenugenr.ugenr
    not in (select uge as ugenr from eksperten)
       
Håber det er svar nok :)

Mvh Poul
Avatar billede webben Nybegynder
27. januar 2002 - 10:40 #6
Jeg har selv fundet en løsning... Men i for lige nogle points for nogle gode svar....
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