2009-05-28 107 views
4

從我以前的Access日子裏,有一個First()函數可以讓你把第一行作爲一個聚合函數。 SQL Server中是否有任何等價物?有沒有辦法在SQL Server中執行FIRST()?

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 

編輯: 我剛剛從任何行想要的值,因爲它們都將是相同的。我試圖對數據庫很好,讓它給我第一個它發現:)

回答

5

好吧,這要看情況。

你的意思是「任何單行」?那麼你可以使用MIN或MAX,它應該適用於大多數數據類型。

但是,如果您的意思是「您可以找到的第一行」,那麼答案是否定的。

這就好比告訴數據庫引擎「我希望你給我一個特定的行,符合這些標準,其中一個標準是你可以給我任何你想要的行」。

這樣做的原因是,除非您對行進行排序,否則沒有第一個概念,也不能以任何有意義的方式對行進行排序,從而以這種方式處理組。

+0

雖然看看jrcs3的回答,但使用子查詢可能會給你想要的東西。 – 2009-05-28 22:07:56

2

你可以做SELECT TOP 1 * FROM ...只得到第一行。

1

不是我所知道的,只是使用MIN()

4

你可以嘗試:

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 

這一個直接從Product表獲得的第一個產品作爲一個子查詢。子查詢中的ORDER BY ID應該爲您提供Product表中的第一個ProductName

相關問題