Есть ли способ сделать FIRST () в SQL Server? - PullRequest
4 голосов
/ 29 мая 2009

Из моих старых дней доступа существовала функция First (), которая позволяла вам получить первую строку в виде агрегатной функции. Есть ли эквивалент в 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: Я просто хотел получить значение из любой строки, поскольку все они будут одинаковыми. Я пытался быть вежливым с базой данных, и пусть она просто даст мне первое, что она найдет :)

Ответы [ 4 ]

5 голосов
/ 29 мая 2009

Ну, это зависит.

Вы имеете в виду "какой-нибудь один ряд"? Тогда вы можете использовать MIN или MAX, он должен работать с большинством типов данных.

Однако, если вы имеете в виду «первую строку, которую вы можете найти», то ответ - нет.

Это все равно, что сказать движку базы данных: «Я хочу, чтобы вы дали мне конкретную строку, которая соответствует этим критериям, и один из критериев заключается в том, что вы можете дать мне любую нужную строку».

Причина этого в том, что, если вы не упорядочите строки, сначала не будет понятия, и вы не сможете упорядочить строки каким-либо осмысленным способом, который будет работать с группой таким образом.

4 голосов
/ 29 мая 2009

Вы можете попробовать:

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 в подзапросе должно получить первую ProductName в таблице Product.

2 голосов
/ 29 мая 2009

Вы можете сделать SELECT TOP 1 * FROM ..., чтобы получить только первый ряд.

1 голос
/ 29 мая 2009

не то, о чем я знаю, просто используйте MIN ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...