Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Retourne une collection de valeurs d’argument qui sont projetées hors de la partition de groupe actuelle à laquelle l’agrégation est associée. L’agrégat GroupPartition est un agrégat basé sur un groupe et n’a pas de formulaire basé sur la collection.
Syntaxe
GROUPPARTITION( [ALL|DISTINCT] expression )
Les arguments
expression Toute expression Entity SQL.
Remarques
La requête suivante génère une liste de produits et une collection de quantités de ligne de commande par produit :
SELECT p, GroupPartition(ol.Quantity) FROM LOB.OrderLines AS ol
GROUP BY ol.Product AS p
Les deux requêtes suivantes sont sémantiquement égales :
SELECT p, Sum(GroupPartition(ol.Quantity)) FROM LOB.OrderLines AS ol
GROUP BY ol.Product AS p
SELECT p, Sum(ol.Quantity) FROM LOB.OrderLines AS ol
group by ol.Product as p
L’opérateur GROUPPARTITION peut être utilisé conjointement avec les fonctions d’agrégation définies par l’utilisateur.
GROUPPARTITION est un opérateur d’agrégation spécial qui contient une référence au jeu d’entrée groupé. Cette référence peut être utilisée n’importe où dans la requête où GROUP BY est dans l’étendue. Par exemple:
SELECT p, GroupPartition(ol.Quantity) FROM LOB.OrderLines AS ol GROUP BY ol.Product AS p
Avec une valeur régulière GROUP BY, les résultats du regroupement sont masqués. Vous ne pouvez utiliser les résultats que dans une fonction d’agrégation. Pour afficher les résultats du regroupement, vous devez mettre en corrélation les résultats du regroupement et du jeu d’entrées à l’aide d’une sous-requête. Les deux requêtes suivantes sont équivalentes :
SELECT p, (SELECT q FROM GroupPartition(ol.Quantity) AS q) FROM LOB.OrderLines AS ol GROUP BY ol.Product AS p
SELECT p, (SELECT ol.Quantity AS q FROM LOB.OrderLines AS ol2 WHERE ol2.Product = p) FROM LOB.OrderLines AS ol GROUP BY ol.Product AS p
Comme indiqué dans l’exemple, l’opérateur d’agrégation GROUPPARTITION facilite l’obtention d’une référence au jeu d’entrées après le regroupement.
L’opérateur GROUPPARTITION peut spécifier n’importe quelle expression Entity SQL dans l’entrée de l’opérateur lorsque vous utilisez le expression paramètre.
Par exemple, toutes les expressions d’entrée suivantes à la partition de groupe sont valides :
SELECT groupkey, GroupPartition(b) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition(1) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition(a + b) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition({a + b}) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition({42}) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition(b > a) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
Exemple :
L’exemple suivant montre comment utiliser la clause GROUPPARTITION avec la clause GROUP BY. Les entités de clause GROUP BY regroupent SalesOrderHeader les entités par leur Contact. La clause GROUPPARTITION projette ensuite la TotalDue propriété pour chaque groupe, ce qui entraîne une collection de décimales.
USING Microsoft.Samples.Entity
Function MyAvg(dues Collection(Decimal)) AS
(
Avg(SELECT value due FROM dues AS due WHERE due > @price)
)
SELECT TOP(10) contactID, MyAvg(GroupPartition(order.TotalDue))
FROM AdventureWorksEntities.SalesOrderHeaders AS order
GROUP BY order.Contact.ContactID AS contactID;