Не существует такой вещи, как первая запись, поскольку таблицы SQL представляют неупорядоченные данные.
Таким образом, вы можете использовать порядок в столбце.В вашем случае это может быть:
SELECT Name, MIN(Description), SUM(Amount)
FROM dbo.Expenses
GROUP BY Name;
Если у вас есть столбец заказа, вы можете использовать условное агрегирование:
SELECT Name,
MAX(CASE WHEN seqnum = 1 THEN Description END),
SUM(Amount)
FROM (SELECT e.*,
ROW_NUMBER() OVER (PARTITION BY Name ORDER BY ?) as seqnum
FROM dbo.Expenses e
) e
GROUP BY Name;
?
является заполнителем для заказастолбец.
Существует еще один довольно загадочный способ использования FIRST_VALUE()
:
SELECT DISTINCT Name,
FIRST_VALUE(Description) OVER (PARTITION BY name ORDER BY ?),
SUM(Amount) OVER (PARTITION BY name)
FROM dbo.Expenses;
. Используется FIRST_VALUE()
, который доступен как аналитическая функция, но не оконная функция.