Добрый день!Заявление о ситуации в разделе Where в SQL Server
У меня есть запрос с использованием SQL, который дает результирующий набор продаж для каждого арендатора. Теперь я хочу получить окончательный набор результатов, который показывает верхние 5 и нижние 5 с точки зрения продаж (может быть гибким, но, как пример, 5)
Я использовал функцию рангов, чтобы получить рейтинг за продажи, и смог получить почти желаемый результат, отобразив верхнего и нижнего арендаторов на основе продаж.
Вот часть кода из хранимой процедуры
@RankedBy int = 5
SELECT *FROM (
SELECT #TEMPTABLE5.*, 'BOTTOM' AS 'RankName' ,
Rank() over (Partition BY Business ORDER BY Sales) AS Rank
FROM #TEMPTABLE5
) rs WHERE Rank <= @RankedBy
UNION ALL
SELECT *FROM (
SELECT #TEMPTABLE5.*, 'BOTTOM' AS 'RankName' ,
Rank() over (Partition BY Business ORDER BY Sales DESC) AS Rank
FROM #TEMPTABLE5
) rs WHERE Rank <= @RankedBy
order by Business, RankName DESC ,Rank
и это результирующий набор
tenant business sales rankName rank
sample A1 food 1500 top 1
sample A2 food 1400 top 2
sample A3 food 1300 top 3
sample A4 food 1200 top 4
sample A5 food 1100 top 5
sample A6 food 100 bottom 1
sample A7 food 200 bottom 2
sample A8 food 300 bottom 3
sample A9 food 400 bottom 4
sample A10 food 500 bottom 5
sample B1 non food 2000 top 1
sample B2 non food 1800 top 2
sample B3 non food 1500 top 3
sample B3 non food 1500 bottom 1
sample B2 non food 1800 bottom 2
sample B1 non food 2000 bottom 3
Основываясь на данной информации, я уже достиг, чтобы получить верхнюю и снизу на основе NUMBER ASSIGNED IN @RankedBy Parameter.
ЧТО я хочу сейчас, чтобы иметь условие, при котором, если результат установлен в бизнес НИЖЕ ИЛИ МЕНЕЕ ПОКАЗАТЕЛЯ @RankedBy, результат больше не должен включать в себя нижнюю часть, как этот образец корректный результат:
tenant business sales rankName rank
sample A1 food 1500 top 1
sample A2 food 1400 top 2
sample A3 food 1300 top 3
sample A4 food 1200 top 4
sample A5 food 1100 top 5
sample A6 food 100 bottom 1
sample A7 food 200 bottom 2
sample A8 food 300 bottom 3
sample A9 food 400 bottom 4
sample A10 food 500 bottom 5
sample B1 non food 2000 top 1
sample B2 non food 1800 top 2
sample B3 non food 1500 top 3
не еда имеет 3 записи только, меньше параметра, назначенного в @RankedBy, который 5.
на моем существующем коде, что я планировал это иметь счета за бизнес и положить условие в where where, но я нашел его в эффективным и неэффективным.
Если кто-либо из вас может дать более эффективное кодирование или может исправить мои первоначальные коды.
СПАСИБО ЗАРАНЕЕ
вы можете дать мне пример кода сэр? – rickyProgrammer
Давайте посмотрим, смогу ли я получить синтаксис в первый раз: 'CREATE TEMP TABLE foo (арендатор TEXT, бизнес-ТЕКСТ, продажа INTEGER, rankName TEXT, rank INTEGER); INSERT INTO foo SELECT ... как и вы; SELECT * из заказа foo по лимиту продаж 5; ' – manuBriot
LIMIT - это mysql I beleive. Для SQL Server 'SELECT TOP 5' и т. Д. –