Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment utiliser group by dans une requête SQL Server ?

En général, une fois que vous commencez à grouper, chaque colonne répertoriée dans votre SELECT doit être soit une colonne de votre groupe, soit un agrégat de celle-ci. Supposons que vous ayez un tableau comme celui-ci :

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

Si vous vouliez obtenir une liste de toutes les villes de votre base de données, et que vous essayiez :

SELECT * FROM table GROUP BY City

... cela échouerait, car vous demandez des colonnes (ID et nom) qui ne figurent pas dans la clause GROUP BY. Vous pourriez plutôt :

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

...et cela vous donnerait :

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

...mais n'obtiendrait PAS votre identifiant ou votre nom. Vous pouvez faire des choses plus compliquées avec par ex. des sous-sélections ou des auto-jointures, mais fondamentalement, ce que vous essayez de faire n'est pas possible comme indiqué. Détaillez davantage votre problème (à quoi voulez-vous que les données ressemblent ?) et partez de là.

Bonne chance !