2009-05-28 7 views
4

Von meiner alten Access Tage, gab es eine First() -Funktion, mit der Sie die erste Zeile als eine Aggregatfunktion erhalten können. Gibt es eine Entsprechung in SQL Server?Gibt es eine Möglichkeit, FIRST() in SQL Server auszuführen?

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: Ich wollte nur einen Wert aus einer beliebigen Zeile, da sie alle gleich sein werden. Ich habe versucht, nett zu der Datenbank zu sein und lass es mir nur die erste, die es findet :)

Antwort

5

Nun, es kommt darauf an.

Sie meinen "jede einzelne Zeile"? Dann können Sie MIN oder MAX verwenden, es sollte mit den meisten Datentypen funktionieren.

Wenn Sie jedoch "die erste Zeile, die Sie finden können" meinen, dann ist die Antwort nein.

Das ist ähnlich zu der Datenbank-Engine zu sagen, dass "Ich möchte, dass Sie mir eine bestimmte Zeile, die diese Kriterien erfüllt, und eines der Kriterien ist, dass Sie mir eine beliebige Zeile geben können".

Der Grund dafür ist, dass, wenn Sie die Zeilen nicht bestellen, gibt es kein Konzept der ersten, und Sie können die Zeilen in keiner sinnvollen Weise, die mit einer Gruppe auf diese Weise arbeiten würde.

+0

Werfen Sie einen Blick auf die Antwort von jrcs3, obwohl eine Unterabfrage sehr gut geben kann, was Sie wollen. –

2

Sie können SELECT TOP 1 * FROM ... tun, um nur die erste Zeile zu bekommen.

1

nicht, dass ich weiß, verwenden Sie einfach MIN()

4

Sie könnten versuchen:

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 

Diese bekommt man das erste Produkt direkt aus der Product Tabelle als Unterabfrage. Die ORDER BY ID in der Unterabfrage sollte Sie die erste ProductName in der Product Tabelle bekommen.

Verwandte Themen