[MS SQL] LEFT JOIN query

Pagina: 1
Acties:

  • oZy
  • Registratie: Juli 2001
  • Laatst online: 23:12
Werkt wel:
code:
1
2
3
4
5
6
7
8
9
10
SELECT
  Forum.FrmID, COUNT(Reacties.RctID) AS TotaalReacties
FROM
  Forum
LEFT JOIN
  Reacties
ON
  Forum.FrmID = Reacties.RctID
GROUP BY
  Forum.FrmID

Werkt niet:
code:
1
2
3
4
5
6
7
8
9
10
SELECT
  Forum.FrmID, Forum.FrmDatum, COUNT(Reacties.RctID) AS TotaalReacties
FROM
  Forum
LEFT JOIN
  Reacties
ON
  Forum.FrmID = Reacties.RctID
GROUP BY
  Forum.FrmID

Waarom:
code:
1
Column 'Forum.FrmDatum' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Ik vind het een beetje een vage error.. kan ik dit wel in 1 query kwijt? Staat zo slordig met meerdere queries.

Nog vreemder omdat het hier wél kan :?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
code:
1
2
3
4
5
6
7
8
9
10
SELECT
  Forum.FrmID, Forum.FrmDatum, COUNT(Reacties.RctID) AS TotaalReacties
FROM
  Forum
LEFT JOIN
  Reacties
ON
  Forum.FrmID = Reacties.RctID
GROUP BY
  Forum.FrmID, Forum.FrmDatum

dit zou wel moeten werken

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Orphix
  • Registratie: Februari 2000
  • Niet online
In MS SQL moet je alle velden in de group by zetten:
code:
1
2
GROUP BY
  Forum.FrmID, Forum.FrmDatum

Andere topic heb ik niet doorgelezen maar bv MySQL heeft dit niet nodig.

/edit
te :z

  • oZy
  • Registratie: Juli 2001
  • Laatst online: 23:12
Weird :o

maar als er nou 2 topics zijn met dezelfde datum, dan groepeertie ze toch op datum (en krijg je er dus maar 1 van terug)? of zit ik nu verkeerd te redeneren.

PS

ik heb het even geprobeerd, maar dat datum veld is niet het enige veld wat ik erbij wil betrekken. Er zitten ook text velden bij (memo), en die kan je niet in een GROUP clause gebruiken.. en dan gaatie daar dus weer op zeuren..

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Ik vind het sowieso een vage manier van omgaan met data (kan aan mij liggen). Je wil een aantal rows group-en en van 1 van die rows als extra een (datum/memo)veld meenemen in de recordset. Hoe moet MSSQL dan weten weten welke je wil hebben :?

Je zal dus aan moeten geven welke je wil, m.a.w. in de group by toevoegen of een aggregate functie gebruiken (bijv. max()).

Today's subliminal thought is:


Verwijderd

Op woensdag 03 juli 2002 17:03 schreef oZy het volgende:
Weird :o

maar als er nou 2 topics zijn met dezelfde datum, dan groepeertie ze toch op datum (en krijg je er dus maar 1 van terug)? of zit ik nu verkeerd te redeneren.
Nee, want je groepeert eerst op FrmID, die zijn uniek, daarbinnen op datum, dus dat is niet erg. Heb je meer rows, dan moet SQLserver iets doen met die datums, vandaar dat je die in aggregate functies moet plaatsen.
ik heb het even geprobeerd, maar dat datum veld is niet het enige veld wat ik erbij wil betrekken. Er zitten ook text velden bij (memo), en die kan je niet in een GROUP clause gebruiken.. en dan gaatie daar dus weer op zeuren..
Group By limiteert rows, door voor elke group by field 1 distinct row toe te laten. de overige fields kun je dan sommeren, vandaar dat alle fields in de selectlist in aggregate functies moeten worden geplaatst, want dat is het doel van Group By.

Wat wil je precies bereiken, wellicht is de querie makkelijker te schrijven met bv een distinct.

[edit]
dit is wat je wilt:
code:
1
2
3
4
5
6
7
8
SELECT
  FrmID, 
  FrmDatum, 
  (
    SELECT COUNT(RctID) FROM Reacties WHERE RctID=FrmID
  ) AS TotaalReacties
FROM
  Forum

Andere velden naar believe toevoegen.

  • oZy
  • Registratie: Juli 2001
  • Laatst online: 23:12
Op woensdag 03 juli 2002 18:18 schreef Annie het volgende:
Ik vind het sowieso een vage manier van omgaan met data (kan aan mij liggen). Je wil een aantal rows group-en en van 1 van die rows als extra een (datum/memo)veld meenemen in de recordset. Hoe moet MSSQL dan weten weten welke je wil hebben :?
Kan zijn dat ik het misschien verkeerd uitleg, omdat ik nog niet zo'n (MS)SQL held ben, maar de gedachte is toch simpel lijkt me. Selecteer wat velden van topic nr 134 en tel daarbij alle reacties met hetzelfde topic id.

Otis, :* +10 behulpzaam! (voor de uitleg, niet de oplossing! Nou ja, ook de oplossing, maar ik snap nu ook de gedachtengang achter de query.)
Pagina: 1