Jag har en access-databas som håller ordning på en massa mallar i flera versioner. Du får använda en subfråga så här: Tack, det fungerar om jag bara vill välja ett fält ur tabellen tVersioner. Men jag vill ju välja ut flera fält (v_id, max(v_nummer) och v_datum). Prova med följande SQL,Knepig sql
Databasen innehåller x tabeller, tMallar, tVersioner.
tMallar innehåller fälten m_id (nyckel), m_namn och m_beskrivn.
tVersioner innehåller fälten v_id (nyckel), m_id (från tMallar), v_nummer, v_datum.
Varje post i tMallar kan ha flera motsvarande poster i tVersioner.
Nu vill jag visa en post för varje mall som innehåller mallId (m_id), mallnamn (m_namn), dess högsta versionsnummer (v_nummer), versionsdatum (v_datum) och versionsId för den högsta versionen (v_id) på en ASP-sida
Jag har testat tusen varianter, men får det inte att fungera.
Hur ska jag göra??
//ÅsaSv: Knepig sql
<code>SELECT m_id, m_namn,
(SELECT MAX(DISTINCT tVersioner.v_nummer)
FROM tVersioner
WHERE m_id = tMallar.m_id) AS v_nummer
FROM tMallar</code>Sv: Knepig sql
Fler förslag???
/ÅsaSv: Knepig sql - ÄNNU INTE LÖST
<code>SELECT tMallar.m_id, tMallar.m_namn, tVersioner.v_nummer, tVersioner.v_datum, tVersioner.v_id
FROM tMallar INNER JOIN tVersioner ON tMallar.m_id = tVersioner.m_id
WHERE (((tVersioner.v_nummer) In (select max(v_nummer) from tversioner where m_id=tMallar.m_id)));</code>
Den ger dig alla mallar, samt de högsta (i fråga om tal) versioner som hör till varje mall, samt motsvarande versions datum samt v_id.
Varför använder du v_id som nyckel. Jag tror att i tabellen tVersioner så består primärnyckel av två sammansatta fält, nämligen m_id och v_nummer. Dessa två tillsammans är alltid unika i relation till alla andra poster. Det är egentligen inte så stor betydelse i ditt sammanhang, men bidrar till högre normalisering i databasen.
För att skapa själva ASP sidan kan du också prova om ovan SQL inte funkar att anropa två frågor. Först anropar du varje mall för sig och skriver in i kolumn i HTML tabell. För varje mall anropar du därefter med ny SQL den post i tVersioner med högst (select MAX(v_nummer ... ) och fortsätter skriva in värden i HTML tabellen. Innan nästa loop i första SQL anropet avslutar du HTML tabellen och påbörjar nästa. Det blir två For-loopar nästlade i varandra.
Återkom om det inte funkar!
Roger