Как я могу получить 1 верхнее значение совокупного запроса? - PullRequest
0 голосов
/ 30 августа 2018

Рассмотрим следующее:

SELECT TOP 1 discountAmount,
       SUM(amount)
FROM customerTransactions
WHERE customerTrasactions.id = 123
ORDER BY discountAmount DESC

Этот запрос определенно не будет работать, потому что я не группируюсь по discountAmount, но все, что я хочу, это общая сумма сумм для данного клиента плюс его наибольшая сумма скидки.

Есть ли способ, которым я могу сделать это, не прибегая к подзапросу или кроссу? Это небольшая часть гораздо большего запроса, который я пытаюсь оптимизировать, поэтому возможность получить эти две точки данных в одном запросе, как это, будет оптимальной.

К сожалению, я ограничен в SQL Server 2008

1 Ответ

0 голосов
/ 30 августа 2018

Вы можете использовать оконные функции:

SELECT TOP (1) discountAmount,
       SUM(amount) OVER () as sum
FROM customerTransactions
WHERE customerTrasactions.id = 123
ORDER BY discountAmount DESC;

Функция окна предоставляет сумму по всем строкам , которая будет возвращена . То есть оконная функция оценивается до ORDER BY или TOP (1).

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