Avatar billede kabbak Professor
23. februar 2006 - 23:38 Der er 10 kommentarer og
1 løsning

Sammenligene datoer

Grundtabel: ’ som indeholder alle et NR på alle dyr
NR
Linie

Data: ’ Som indeholder næsten alle NR, som er gentaget på forskellige datoer
NR
Linie
Dato
Vægt

Jeg vil sammenligne vægten på 2 forskellige datoer, på samme NR.
Men det er ikke sikkert at dyret er vejet hverken på den første dato eller den sidste, jeg vil alligevel se numret
Eks. På hvordan jeg ønsker udtrækket

Nr , linie,  dato1 , vægt1,  dato2,  vægt2
100 ,  1,  01-01-2006,  600, 20-01-2005, 700
101  ,  1  01-01-2006, 450 ,null , null
102 ,  1 ,null, null , 20-01-2006, 550
103 , 1 ,null ,null ,null,null ,null
Avatar billede kjulius Novice
24. februar 2006 - 00:16 #1
Måske sådan?

SELECT g.Nr, g.linie, d1.Dato, d1.[Vægt], d2.Dato, d2.[Vægt]
FROM (Grundtabel g LEFT JOIN Data d1 ON g.Nr=D1.Nr AND g.linie=d1.linie) LEFT JOIN Data d2 ON g.Nr=d2.Nr AND g.linie=d2.linie
WHERE d1.dato IS NULL OR d2.dato IS NULL OR d1.dato = Date([Angiv dato 1]) OR d2.dato = Date[[Angiv dato 2])
Avatar billede kabbak Professor
24. februar 2006 - 00:38 #2
det er faktisk den jeg har prøvet, den virker ikke, du får lige de rigtige felter

Du behøver ikke at lave JOIN på linie

SELECT g.NR AS Udtryk1, g.Linie AS Udtryk2, d1.Dato AS Udtryk3, d1.Gram AS Udtryk4, d2.Dato AS Udtryk5, d2.Gram AS Udtryk6
FROM (GrundDataF65244 AS g LEFT JOIN F65244 AS d1 ON g.NR = d1.Nr) LEFT JOIN F65244 AS d2 ON g.NR = d2.Nr
WHERE (((d1.Dato)=#9/19/2005#) AND ((d2.Dato)=#11/19/2005#));

den giver kun værdier, hvis der er data i både d1 og d2
Avatar billede kabbak Professor
24. februar 2006 - 00:39 #3
denne er vist nemmere at overskue

SELECT g.NR, g.Linie, d1.Dato, d1.Gram, d2.Dato, d2.Gram
FROM (GrundDataF65244 AS g LEFT JOIN F65244 AS d1 ON g.NR = d1.Nr) LEFT JOIN F65244 AS d2 ON g.NR = d2.Nr
WHERE (((d1.Dato)=#9/19/2005#) AND ((d2.Dato)=#11/19/2005#));
Avatar billede kjulius Novice
24. februar 2006 - 00:56 #4
Nej, den første var ikke rigtig, det er nok snarere sådan...

SELECT g.Nr, g.linie, d1.Dato, d1.[Vægt], d2.Dato, d2.[Vægt]
FROM (Grundtabel AS g LEFT JOIN [SELECT *  FROM Data WHERE Dato = #1/1/6#]. AS d1 ON (g.linie=d1.linie) AND (g.Nr=D1.Nr)) LEFT JOIN [SELECT *  FROM Data WHERE Dato = #1/20/6#]. AS d2 ON (g.linie=d2.linie) AND (g.Nr=d2.Nr);
Avatar billede kjulius Novice
24. februar 2006 - 01:01 #5
eller med de nye tabel- og feltnavne:

SELECT g.Nr, g.linie, d1.Dato, d1.Gram, d2.Dato, d2.Gram
FROM (GrundDataF65244 AS g LEFT JOIN [SELECT *  FROM F65244 WHERE Dato = #1/1/6#]. AS d1 ON (g.linie=d1.linie) AND (g.Nr=D1.Nr)) LEFT JOIN [SELECT *  FROM F65244 WHERE Dato = #1/20/6#]. AS d2 ON (g.linie=d2.linie) AND (g.Nr=d2.Nr);
Avatar billede kabbak Professor
24. februar 2006 - 01:11 #6
Nu ser det godt ud, men du skal ikke JOIN på linie, dyret kan skifte linie undervejs, kun NR er unik

Sådan kom den til at se ud, men datoerne skal fanges fra en formular, kan det klares



SELECT g.NR, g.Linie, d1.Linie, d1.Hal, d1.Bur, d1.Køn, d1.Dato, d1.Gram, d1.Bem, d2.Linie, d2.Hal, d2.Bur, d2.Køn, d2.Dato, d2.Gram, d2.Bem
FROM (GrundDataF65244 AS g LEFT JOIN [SELECT *  FROM F65244 WHERE Dato =  #11/19/2005#]. AS d1 ON g.NR = d1.Nr) LEFT JOIN [SELECT *  FROM F65244 WHERE Dato = #19/09/2005#]. AS d2 ON g.NR = d2.Nr;
Avatar billede kabbak Professor
24. februar 2006 - 01:16 #7
Jeg går i seng nu, men vender tilbage i morgen, vi er tæt på løsningen nu.
Avatar billede kjulius Novice
24. februar 2006 - 03:03 #8
Ja, det kan jo laves på flere måder, men jeg kan nu egentlig godt lide denne metode:

På din form har du to indtastningsfelter (txtDato1 og txtDato2), samt en kommandoknap (cmdEnterDato). På kommandoknappen har du en Click event:

Private Sub cmdEnterDato_Click()
    Dim strSQL As String
    Dim Dato1 As Date
    Dim Dato2 As Date
    Dato1 = CDate(Replace(txtDato1, ".", "-"))
    Dato2 = CDate(Replace(txtDato2, ".", "-"))
    strSQL = _
        "SELECT g.Nr, g.linie, d1.Dato, d1.[Vægt], d2.Dato, d2.[Vægt]" & vbCrLf & _
        "FROM (Grundtabel AS g" & vbCrLf & _
        "LEFT JOIN [SELECT *  FROM Data WHERE Dato = #" & Format(Dato1, "m\/d\/y") & "#]. AS d1" & vbCrLf & _
        "  ON (g.Nr=D1.Nr))" & vbCrLf & _
        "LEFT JOIN [SELECT *  FROM Data WHERE Dato = #" & Format(Dato2, "m\/d\/y") & "#]. AS d2" & vbCrLf & _
        "  ON (g.Nr=d2.Nr)"
    CurrentDb.QueryDefs("Vægt3").SQL = strSQL
End Sub

Rutinen ændrer i forespørgslen "Vægt3", så den er klar til at udføres. Du kan jo evt. lade den efterfølge af en Me.Requery instruktion, hvis du f.eks. har datofelterne og kommandotasten placeret i formens headersektion, mens resultatet af forespørgslen skal vises i detailsektionen på samme form.

Fordelen ved denne metode er, at man bagefter kan køre forespørgslen, selv efter at formen er lukket igen.

Beklager, at det viste ikke bruger dine tabel- og feltnavne. Det må du selv rette til... :-)
Avatar billede kabbak Professor
24. februar 2006 - 08:08 #9
Smid lige et svar, jeg har ikke tid til at teste før mandag, men det ser rigtig ud.
Avatar billede kjulius Novice
24. februar 2006 - 09:19 #10
¡No problemo! Hasta luego.. :-)
Avatar billede kjulius Novice
24. februar 2006 - 22:03 #11
Hmm... Ved nærmere eftersyn, var der et lille issue med datoen (formatteringen), her er en opdatering:


Private Sub cmdEnterDato_Click()
    Dim strSQL As String
    Dim Dato1 As Date
    Dim Dato2 As Date
    Dato1 = CDate(Replace(txtDato1, ".", "-"))
    Dato2 = CDate(Replace(txtDato2, ".", "-"))
    strSQL = _
        "SELECT g.NR, g.Linie, d1.Linie, d1.Hal, d1.Bur, d1.Køn, d1.Dato, d1.Gram, d1.Bem," & _
        "d2.Linie, d2.Hal, d2.Bur, d2.Køn, d2.Dato, d2.Gram, d2.Bem" & vbCrLf & _
        "FROM (GrundDataF65244 AS g" & vbCrLf & _
        "LEFT JOIN [SELECT *  FROM F65244 WHERE Dato = #" & Format(Dato1, "m\/d\/yyyy") & "#]. AS d1" & vbCrLf & _
        "  ON (g.Nr=D1.Nr))" & vbCrLf & _
        "LEFT JOIN [SELECT *  FROM F65244 WHERE Dato = #" & Format(Dato2, "m\/d\/yyyy") & "#]. AS d2" & vbCrLf & _
        "  ON (g.Nr=d2.Nr)"
    CurrentDb.QueryDefs("Vægt3").SQL = strSQL
End Sub

Som du kan se, har jeg benyttet lejligheden til at ændre fil- og feltnavnene til dem du angav i dit sidste bidrag...
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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