Laden...

Frage zu GROUP BY

Erstellt von Paulo vor 16 Jahren Letzter Beitrag vor 16 Jahren 802 Views
P
Paulo Themenstarter:in
172 Beiträge seit 2005
vor 16 Jahren
Frage zu GROUP BY

verwendetes Datenbanksystem: SQL Server 2005


SELECT siteTag FROM site_tag WHERE UserID='" + UserID + "' GROUP BY siteTag

Funktioniert ohne Probleme.


SELECT siteTag,siteTagID FROM site_tag WHERE UserID='" + UserID + "' GROUP BY siteTag

Funktioniert nicht:

Column 'site_tag.siteTagID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Kann mir jemand erklären warum? Ich bräuchte die siteTagID auch, möchte aber dass immer nur ein siteTag angezeigt wird (via Group BY).

Tabelleninhalt ist z.B.:
1,test1,siteid1,uid1
2,test2,siteid1,uid1
3,test1,siteid2,uid1

Danke!

3.430 Beiträge seit 2007
vor 16 Jahren

Hallo Paulo,

das liegt daran, dass du nur die SiteTag in der Group BY Clause hast.

Wie soll da so gehen... nehmen wir mal an, du hast folgende tabelle.

id test sitetagid sitetag
1, test1 siteid1 uid1
2, test2 siteid1 uid1
3, test1,siteid2 uid1

Mit der GroupBy clause gruppiert er dir nun alle uid1 zusammen d.h du hast nur noch einen Datensatz. Bei der Siteid weiss er aber nicht was er machen soll. Denn da Hat er verschiedene Werte drinnen, er kann aber nur einen im Resultat anzeigen. Deshalb bekommst du die Meldung, dass die SiteID in einer Aggregatfunktion drinnen sein muss, damit man dieses Problem nicht hat.

Solltest du also immer die größte (MAX) oder kleinste (MIN) SiteID brauchn, so kannst du das feld einfach wie folgt in die aggregatfunktion einfügen.

Guckst du:


SELECT siteTag,MAX(siteTagID) FROM site_tag WHERE UserID='" + UserID + "' GROUP BY siteTag

mfg
MichlG