Hej! Left (right) outer join kommer, till skillnad från inner join, ta med även de fall då en rad saknas i det högra (vänstra) uttrycket. Hej Tomas! Vilken rad tillhör de i så fall? Kan det vara nåt suspekt med datamodellen i och med att de inte tillhör den senaste raden? Hej igen Tomas! Vet inte om jag tolkar dig rätt :) Hej igen och stort tack! Hmm, känner inte till något sådant program på rak arm. Det finns ju en Query Designer i SQL Server Management Studio som jag tror liknar den i Access, men jag har ärligt talat aldrig använt den. Tycker det är svårt att få ordning på lite mer bökiga joins och sånt :)Länka 3 tabeller
Jag har 3 tabeller med följande innehåll.
tblnormaler (idNummer)
tblprotokoll (pIdNummer, protokollNummer)
tblkalibrering (kProtokollNummer, kalibreringsdatum)
När ett instrument (idNummer) kalibreras skapas ett protokollnummer som i sin tur skapar ett kalibreringsdatum.
Jag vill med en sql-sats lista ALLA instrument tillsammans med det senaste kalibreringsdatumet.
Så här har jag gjort:
SELECT * FROM tblnormaler LEFT JOIN
(SELECT * FROM tblprotokoll INNER JOIN tblkalibrering ON tblkalibrering.kProtokollNummer=tblprotokoll.protokollNummer)
tblprotokoll ON tblprotokoll.pIdNummer=tblnormaler.idNummer
ORDER BY tblnormaler.idNummer ASC
Det som händer är att bara de instrument som har ett kalibreringsdatum visas. Tanken var att alla instrument ska visas i listan.
Om de har ett datum så ska det visas annars ska det vara tomt.
Dessutom är det endast det senaste datumet som ska visas. Jag behöver hjälp med detta.
Tack på förhand
Lars Lantz
Sv: Länka 3 tabeller
SELECT n.idNummer, senastekalibrering.SenasteKalibreringsdatum
FROM tblNormaler n
LEFT OUTER JOIN (
SELECT MAX(k.kalibreringsdatum) AS SenasteKalibreringsdatum, p.pIdNummer
FROM tblkalibrering k
INNER JOIN tblprotokoll p ON k.kProtokollNummer = p.protokollNummer
GROUP BY p.pIdNummer
) AS senastekalibrering ON n.idNummer = senastekalibrering.pIdNummer
Sv:Länka 3 tabeller
Tack för hjälpen, funkar perfekt!
Hur ska jag göra för att få ut fler fält från tblkalibrering?
SELECT *, senastekalibrering.*
FROM tblnormaler n LEFT OUTER JOIN (
SELECT MAX(k.kalibreringsdatum) AS SenasteKalibreringsdatum, p.pIdNummer, k.egen, k.enp, k.ext
FROM tblkalibrering k
INNER JOIN tblprotokoll p ON k.kProtokollNummer = p.protokollNummer
GROUP BY p.pIdNummer
) AS senastekalibrering ON n.idNummer = senastekalibrering.pIdNummer
ORDER BY n.idNummer ASC
Som du kan se så har jag lagt till k.egen, k.enp, k.ext. Problemet är att dessa värden tillhör inte raden med det senaste datumet.
/Lars
Sv: Länka 3 tabeller
Sv:Länka 3 tabeller
Tack för att du tar dig tid med mitt problem. Jag har emellertid kommit på att förra frågeställningen inte räcker till.
Det jag behöver ha ut ur databasen är det senaste kalibreringsdatumet som innan fast ett datum på alla som har k.egen=1
och ett datum på alla som har k.enp=1 och ett datum på alla som har k.ext=1.
Tacksam för all hjälp
Med vänliga hälsningar
/LarsSv: Länka 3 tabeller
Jag tolkar det som att du vill lista en rad per pryl, samt dess senaste datum för Egen kalibrering, senaste datum för Enp-kalibrering och senaste datum för Ext-kalibrering?
SELECT
n.idNummer,
senastekalibrering.SenasteKalibreringsdatumEgen,
senastekalibrering.SenasteKalibreringsdatumEnp,
senastekalibrering.SenasteKalibreringsdatumExt
FROM tblNormaler n
LEFT OUTER JOIN (
SELECT
p.pIdNummer,
MAX(CASE WHEN k.egen = 1 THEN k.kalibreringsdatum ELSE NULL end) AS SenasteKalibreringsdatumEgen,
MAX(CASE WHEN k.enp = 1 THEN k.kalibreringsdatum ELSE NULL end) AS SenasteKalibreringsdatumEnp,
MAX(CASE WHEN k.ext = 1 THEN k.kalibreringsdatum ELSE NULL end) AS SenasteKalibreringsdatumExt
FROM tblkalibrering k
INNER JOIN tblprotokoll p ON k.kProtokollNummer = p.protokollNummer
GROUP BY p.pIdNummer
) AS senastekalibrering ON n.idnummer = senastekalibrering.pIdnummer
Sv:Länka 3 tabeller
Det är ju ganska logiskt när man ser din lösning.
Detta är exakt som jag menade.
Vet du om det finns något program där man grafiskt gör det man vill med databasen och som sedan skapar sql-koden.
Jag vet att det i access finns ett frågeverktyg som skapar sql-kod.
Du vet kanske något fristående program.
Med vänliga hälsningar
Lars LantzSv: Länka 3 tabeller