2009-05-28 4 views
4

De mes anciens jours d'accès, il y avait une fonction First() qui vous permettait d'obtenir la première ligne en tant que fonction d'agrégat. Y a-t-il un équivalent dans SQL Server?Existe-t-il un moyen de faire FIRST() dans SQL Server?

SELECT 
    c.ID 
, p.ID 
, FIRST(p.ProductName) 
, SUM(fee.Amount) 
from Fee as f 
INNER JOIN Product as p 
ON p.ID = f.ProductID 
INNER JOIN Customer as c 
ON c.ID = p.CustomerID 
GROUP BY c.ID, p.ID 

Edit: Je voulais juste une valeur de chaque ligne, car ils vont tous être le même. J'essayais d'être gentil à la base de données et laissez-moi juste le premier qu'il trouve :)

Répondre

5

Eh bien, cela dépend.

Vous voulez dire "n'importe quelle rangée"? Ensuite, vous pouvez utiliser MIN ou MAX, cela devrait fonctionner avec la plupart des types de données. Cependant, si vous voulez dire «la première rangée que vous pouvez trouver», alors la réponse est non. Cela revient à dire au moteur de base de données: «Je veux que vous me donniez une ligne particulière, qui corresponde à ces critères, et l'un des critères est que vous puissiez me donner n'importe quelle ligne que vous voulez». La raison en est que, sauf si vous commandez les lignes, il n'y a pas de notion de premier, et vous ne pouvez pas ordonner les lignes d'une manière significative qui fonctionnerait avec un groupe de cette façon.

+0

Jetez un oeil à la réponse de jrcs3 cependant, en utilisant une sous-requête pourrait très bien vous donner ce que vous voulez. –

2

Vous pouvez faire SELECT TOP 1 * FROM ... pour obtenir seulement la première rangée.

1

pas que je sache, il suffit d'utiliser MIN()

4

Vous pouvez essayer:

SELECT c.ID, p.ID, 
(SELECT TOP 1 ProductName FROM Product ORDER BY ID) AS ProductName, 
SUM(fee.Amount) 
FROM Fee as f 
INNER JOIN Product as pON p.ID = f.ProductID 
INNER JOIN Customer as cON c.ID = p.CustomerIDGROUP BY c.ID, p.ID 

Celui-ci obtient le premier produit directement à partir du tableau Product comme une sous-requête. Le ORDER BY ID dans la sous-requête devrait vous obtenir le premier ProductName dans la table Product.

Questions connexes