Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie verwende ich Gruppieren nach in der SQL Server-Abfrage?

Im Allgemeinen muss jede Spalte, die in Ihrem SELECT aufgelistet ist, entweder eine Spalte in Ihrer GROUP oder ein Aggregat davon sein, sobald Sie mit dem GROUPing beginnen. Angenommen, Sie haben eine Tabelle wie diese:

| ID | Name        | City        |
|  1 | Foo bar     | San Jose    |
|  2 | Bar foo     | San Jose    |
|  3 | Baz Foo     | Santa Clara |

Wenn Sie eine Liste aller Städte in Ihrer Datenbank erhalten möchten und es versucht haben:

SELECT * FROM table GROUP BY City

... das würde fehlschlagen, weil Sie nach Spalten (ID und Name) fragen, die nicht in der GROUP BY-Klausel enthalten sind. Sie könnten stattdessen:

SELECT City, count(City) as Cnt FROM table GROUP BY City

...und das würde Sie bekommen:

| City        | Cnt |
| San Jose    |  2  |
| Santa Clara |  1  |

...würde Ihnen aber KEINEN Ausweis oder Namen geben. Sie können kompliziertere Dinge mit z. Subselects oder Self-Joins, aber im Grunde ist das, was Sie versuchen, wie angegeben nicht möglich. Unterteilen Sie Ihr Problem weiter (wie sollen die Daten aussehen?) und gehen Sie von dort aus weiter.

Viel Glück!