Hvordan kan jeg få ut antall temaer,antall innlegg og antall treff under et forum? Er det noen felter jeg har glemt, eller burde ha med?
Jeg har laget to spørringer den siste med join virker hvis jeg tar med DISTINCt i countene men da blir det jo feil hvis antalltreff er lik en annen verdi.
Alle countene virker hvis jeg kjører en og en av gangen men ikke sammen.
SELECT F.ForumID,F.ForumNavn,F.ForumBeskrivelse,F.ForumOpprettet,Count(I.InnleggTreff) AS AntallTreff,Count(T.TemaID) AS AntallTemaer,Count(I.InnleggID) AS AntallInnlegg FROM Forum_Forumer AS F,Forum_Temaer AS T,Forum_Innlegg AS I WHERE F.ForumID=T.Tema_ForumID AND F.ForumID=I.Innlegg_ForumID GROUP BY ForumID,ForumNavn,ForumBeskrivelse,ForumOpprettet,ForumPrioritet,InnleggTreff ORDER BY ForumPrioritet ASC
------------------------------- SELECT F.ForumID,F.ForumNavn,F.ForumBeskrivelse,F.ForumOpprettet, SUM(DISTINCT I.InnleggTreff) AS AntallTreff, COUNT(DISTINCT T.TemaID) AS AntallTemaer, COUNT(DISTINCT I.InnleggID) AS AntallInnlegg FROM Forum_Forumer AS F LEFT JOIN Forum_Temaer AS T ON F.ForumID=T.Tema_ForumID LEFT JOIN Forum_Innlegg AS I ON I.Innlegg_ForumID=F.ForumID GROUP BY F.ForumID,F.ForumNavn,F.ForumBeskrivelse,F.ForumOpprettet
Når tabellerne bliver joinet kommer der flere kolonnener end der er pga man sætte flere tabeller ved siden af hinanden.
En måde kunne være at lave nogle sub select for hver: AntallTreff, AntallTemaer og AntallInnlegg. Eks:
SELECT F.ForumID,F.ForumNavn,F.ForumBeskrivelse,F.ForumOpprettet, (select SUM( I.InnleggTreff ) from Innlegg AS I inner join Forum on I.Innlegg_ForumID=Forum.ForumID where i.innlegg_forumid = f.forumid) as AntallTreff, (select count(T.TemaID) from Temaer AS T inner join forum on T.Tema_ForumID = forum.forumID where T.Tema_ForumID = F.forumid) as AntallTemaer, (select count(I.InnleggID) from Innlegg AS I inner join forum on I.Innlegg_ForumID = forum.forumID where I.Innlegg_ForumID = F.forumid) as AntallInnlegg FROM Forum AS F;
Hmm., med den tabelopbygning burde det da bare kunne gøres sådan her, eller hvad?
SELECT F.ForumID,F.ForumNavn,F.ForumBeskrivelse,F.ForumOpprettet, COUNT(*) AS AntallTreff, COUNT(DISTINCT T.TemaID) AS AntallTemaer, COUNT(DISTINCT I.InnleggID) AS AntallInnlegg FROM Forum_Forumer AS F LEFT JOIN Forum_Temaer AS T ON F.ForumID=T.Tema_ForumID LEFT JOIN Forum_Innlegg AS I ON I.Innlegg_ForumID=F.ForumID GROUP BY F.ForumID,F.ForumNavn,F.ForumBeskrivelse,F.ForumOpprettet
Ooops, jeg blev lidt vildledt af dit oprindelige indlæg. Sammenknytningskriteriet på din anden LEFT JOIN var vist ikke helt rigtig. Den bør være sådan her:
SELECT F.ForumID,F.ForumNavn,F.ForumBeskrivelse,F.ForumOpprettet, COUNT(*) AS AntallTreff, COUNT(DISTINCT T.TemaID) AS AntallTemaer, COUNT(DISTINCT I.InnleggID) AS AntallInnlegg FROM Forum_Forumer AS F LEFT JOIN Forum_Temaer AS T ON F.ForumID=T.Tema_ForumID LEFT JOIN Forum_Innlegg AS I ON I.Innlegg_TemaID=T.TemaID GROUP BY F.ForumID,F.ForumNavn,F.ForumBeskrivelse,F.ForumOpprettet
//Eagleeye du kom med svar først men jeg synes kjulius query virker best.
Takk for hjelpen begge to jeg deler pointene mellom dere.
Queryen ser slik ut nå: --------------------------------------------------------- SELECT F.ForumID,F.ForumNavn,F.ForumBeskrivelse, T.TemaID,T.TemaNavn, SUM(I.InnleggTreff) AS AntallTreff, COUNT(DISTINCT T.TemaID) AS AntallTemaer, COUNT(DISTINCT I.InnleggID) AS AntallInnlegg FROM Forum_Forumer AS F LEFT JOIN Forum_Temaer AS T ON F.ForumID=T.Tema_ForumID LEFT JOIN Forum_Innlegg AS I ON I.Innlegg_TemaID=T.TemaID GROUP BY F.ForumID,F.ForumNavn,F.ForumBeskrivelse, T.TemaID,T.TemaNavn ORDER BY F.ForumNavn,T.TemaNavn ---------------------------------------------------------
Hvordan kan jeg legge inn følgende? Noen av dere som vet dette?
CASE WHEN AntallTreff IS Null Then 0 END AS AntallTreff
Som eagleeye også skriver, så kan du bruge både en CASE konstruktion og en COALESCE:
Standard SQL med COALESCE:
SUM(COALESCE(I.InnleggTreff, 0)) AS AntallTreff,
eller standard SQL med CASE:
SUM(CASE WHEN I.InnleggTreff IS NULL THEN 0 ELSE I.InnleggTreff END) AS AntallTreff,
eller Transact SQL med ISNULL:
SUM(ISNULL(I.InnleggTreff, 0)) AS AntallTreff,
Alle veje fører som bekendt til Rom...
Synes godt om
Ny brugerNybegynder
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.