Avatar billede viccer Nybegynder
20. maj 2007 - 14:47 Der er 7 kommentarer og
1 løsning

Count() i en sql string med 2 inner joins..

Hej alle..

Jeg har en sql string der ser sådan her ud:

string sql = "SELECT Fornavne_Tabel.navn, Efternavn_Tabel.efternavn, Alder_Tabel.alder ";
        sql += "FROM Fornavne_Tabel ";
        sql += "INNER JOIN Efternavn_Tabel on Fornavne_Tabel.fk_efternavn=Efternavn_Tabel.efternavn_ID ";
        sql += "INNER JOIN Alder_Tabel on Fornavne_Tabel.fk_alder = Alder_Tabel.alder_ID ";

Jeg vil gerne have den counter rækkerne i Fornavne_Tabel

Har prøvet at blande lidt, men det er aldrig blevet det rigtige resultat.. Nogen forslag?
Avatar billede w13 Novice
20. maj 2007 - 15:14 #1
Og følgende dur ikke?
---------------------
string sql = "SELECT COUNT(Fornavne_Tabel.navn) As noget Fornavne_Tabel.navn, Efternavn_Tabel.efternavn, Alder_Tabel.alder ";
Avatar billede viccer Nybegynder
20. maj 2007 - 15:22 #2
Nej, hver gang jeg prøver at blande en Count() ind siger den:
Column 'Fornavne_Tabel.navn' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Hvis jeg bruger GROUP BY:
string sql = "SELECT Fornavne_Tabel.navn, Efternavn_Tabel.efternavn, Alder_Tabel.alder,COUNT(Fornavne_Tabel.navn_ID) as AntalNavne ";
        sql += "FROM Fornavne_Tabel ";
        sql += "INNER JOIN Efternavn_Tabel on Fornavne_Tabel.fk_efternavn=Efternavn_Tabel.efternavn_ID ";
        sql += "INNER JOIN Alder_Tabel on Fornavne_Tabel.fk_alder = Alder_Tabel.alder_ID ";
        sql += "GROUP BY Fornavne_Tabel.navn, Efternavn_Tabel.efternavn, Alder_Tabel.alder";

sæ skriver den 1 ud for hver række, den ligger ikke rækkerne sammen så jeg får et rigtigt antal..
Avatar billede w13 Novice
20. maj 2007 - 15:27 #3
Okay. Jeg har ikke så meget erfaring med det her, men hvad hvis du så sætter en ALL ind i din count-parentes således:
COUNT(ALL Fornavne_Tabel.navn_ID)
dvs. i dit eget group by-eksempel.
Avatar billede viccer Nybegynder
20. maj 2007 - 15:35 #4
Det ændre intet.. der står stadig 1 i alle rækker.. Hvis jeg bruger SUM() i stedet for COUNT() tæller den 1, 2, 3 og ænder derfor på resultatet, men det er jo kun fordi den ligger rækkerne sammen.. Det kan godt være det ikke er den mest optimale måde at gøre det på, men det må stadig kunne lade sig gøre:P
Avatar billede 0xffff Nybegynder
20. maj 2007 - 16:00 #5
Du skal bruge en nested select

SELECT efternavn_tabel.efternavn, alder_tabel.alder, (select count(fornavne_tabel.navn) from fornavne_tabel)
from fornavne_tabel
INNER JOIN Efternavn_Tabel on Fornavne_Tabel.fk_efternavn=Efternavn_Tabel.efternavn_ID
INNER JOIN Alder_Tabel on Fornavne_Tabel.fk_alder = Alder_Tabel.alder_ID
Avatar billede 0xffff Nybegynder
20. maj 2007 - 16:01 #6
og måske kvalificer din summerede række som f.eks.

SELECT efternavn_tabel.efternavn, alder_tabel.alder, (select count(fornavne_tabel.navn) as antal from fornavne_tabel)
from fornavne_tabel
INNER JOIN Efternavn_Tabel on Fornavne_Tabel.fk_efternavn=Efternavn_Tabel.efternavn_ID
INNER JOIN Alder_Tabel on Fornavne_Tabel.fk_alder = Alder_Tabel.alder_ID
Avatar billede viccer Nybegynder
20. maj 2007 - 16:13 #7
Super!! Det virker Oxffff!!! Så kan jeg også skrive hvad den skal counte på baggrund af (SELECT COUNT(fornavne_tabel.navn) FROM fornavne_tabel WHERE Fornavne_Tabel.fk_alder = 2) as AntalNavne ";
Smid et svar:)
Avatar billede 0xffff Nybegynder
20. maj 2007 - 16:24 #8
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
Computerworld tilbyder specialiserede kurser i database-management

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