Hej, Vaför har du en subselect, du registrerar väl inte samma person mer än en gång för varje "kväll"? Hej Johan, Det låter som att du försöker visa innehållet i fältet medlem_id, men jag ändrade det till anvnamn istället, det var väl så du vill ha det...? Du får alltså ändra där du presenterar datat från medlem_id till anvnamn. Tack! Då borde det bli såhär: Du är ju super Johan! Tackar så hemskt mycket, funkade klockrent! Nu är jag inte så bra på att förklara pedagogiskt, men jag ska göra ett försök :) Tack för försöket Johan!Problem med min sql-sats för att få fram topplista
Kör med Asp.net 1, VB och Ms Access 2000.
Har genom sql-satsen:
sql2="SELECT medlem_id, COUNT(0) AS antal FROM (SELECT DISTINCT medlem_id, kvall_id FROM tblNarvarande) GROUP BY medlem_id ORDER BY count(0) DESC"
...fått fram en topplista över de som varit närvarande flest kvällar! Typ så här:
Medlem_id Närvarande antal gånger
____10____ _______5______________
____6_____ _______3______________
____9_____ _______1______________
Problemet är att när jag listar dessa i min datagrid vill jag inte visa medlem_id utan det anvnamn som motsvarar medlem_id:t.
Men jag vet inte hur detta ska gå till! Har försökt lägga till i ovanstående sql-sats så att jag hämtar hem även anvnamn från tblMedlem men får det inte till att fungera. Skulle egentligen vilja hämta fler fält från tblMedlem som t ex medlembild! Någon som kan hjälpa mig?
Mina tabeller ser ut så här:
tblNarvarande | narvarande_id (primär), kvall_id, medlem_id
tblMedlem | bl a medlem_id (primär) och anvnamn
Tacksam för hjälp!
//mvh BjörnSv: Problem med min sql-sats för att få fram topplista
Såhär borde fungera:
sql2="SELECT anvnamn, COUNT(0) AS antal FROM tblNarvarande INNER JOIN tblMedlem ON tblNarvarande.medlem_id = tblMedlem.medlem_id GROUP BY anvnamn ORDER BY count(0) DESC"
/JohanSv:Problem med min sql-sats för att få fram topplista
Tack för ditt svar. Har testat ditt förslag nu och får felmeddelande:
"A field or property with the name 'medlem_id' was not found on the selected datasource."
//mvh BjörnSv: Problem med min sql-sats för att få fram topplista
/JohanSv:Problem med min sql-sats för att få fram topplista
Det var som du sa Johan.
Dock skulle jag ju egentligen vilja ha med medlem_id också. Alltså anvnamn är tänkt att vara en asp:hyperlinkcolumn! Och i querystringen vill jag skicka med medlem_id (för att gå till rätt medlemsida om man klickar på anvnamn). Går det?
Dessutom är det möjligt att påverka sorteringen i två steg? Jag vill ju att det ska vara som det är nu: Att den som varit närvarande flest kvällar ligger överst. Men jag skulle vilja styra hur anvnamn-kolumnen sorteras (förslagsvis a till ö). Nu blir det så att Zebran och Giraffen har båda 10 kvällar närvarande men Zebran kommer högre i listan än Giraffen. Om det skulle vara bokstavsordningsmässigt borde ju Giraffen komma först!
Tack på förhand,
//mvh BjörnSv: Problem med min sql-sats för att få fram topplista
sql2="SELECT tblMedlem.medlem_id, anvnamn, COUNT(0) AS antal FROM tblNarvarande INNER JOIN tblMedlem ON tblNarvarande.medlem_id = tblMedlem.medlem_id GROUP BY tblMedlem.medlem_id, anvnamn ORDER BY count(0) DESC, anvnamn"
/JohanSv:Problem med min sql-sats för att få fram topplista
Jag kan ju sql-satser till en viss mån, men detta var över min förmåga!
Nu borde jag ju vara nöjd. Men finns det en möjlighet att du kan förklara för mig hur denna sql-sats fungerar? Har inte fått grepp om Inner join och Group by bl a...Det vore ju kul om man kunde lära sig detta och sedan kanske föra "visheten" vidare...
Återigen tack!
//mvh BjörnSv: Problem med min sql-sats för att få fram topplista
Om du börjar med att kör denna fråga:SELECT tblMedlem.medlem_id, anvnamn FROM tblNarvarande INNER JOIN tblMedlem ON tblNarvarande.medlem_id = tblMedlem.medlem_id
Nu kommer du "skapa" alla kombinationer av poster från de båda tabellerna där villkoret tblNarvarande.medlem_id = tblMedlem.medlem_id är sant. I detta fallet blir det alltså en listning av medlem_id och anvnamn, en gång för varje tillfälle där de varit närvarande.
Det man vill göra är att gruppera resultatet så att varje "medlem" enbart visas en gång. Det gör man med group by. Efter group by listar du de fält var kombination av värden ska vara unika. COUNT(0) talar bara om hur många poster som har blivit grupperade.
Vet inte om du blev något klokare på detta...? :) Ett tips för att lära sig är att "leka" lite med frågeeditorn i Access och sedan titta på resulterand sql.
/Johan
Sv:Problem med min sql-sats för att få fram topplista
Tyckte det funka bra med det pedagogiska! :-) Det klarnade en hel del för mig!
Jag återkommer kanske med någon fråga, men tack för nu! (sätter tråden som löst)
//mvh Björn