2009-05-28 103 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

相关问题