#sql #sql-server
#sql #sql-server
Вопрос:
Как мне выбрать каждый набор данных из Row_Number по разделу по таблице на основе Row_Number по разделу по столбцу?
пожалуйста, диаграмма ниже:
----------- ------------- ------------------- ------------ ----------
| packageid | packagename | package max units | references | row_Numb |
----------- ------------- ------------------- ------------ ----------
| 44 | Basic | 10 | 103 | 1 |
| 45 | Basic | 10 | 103 | 2 |
| 42 | Cola | 10 | 102 | 1 |
| 43 | Cola | 10 | 102 | 2 |
| 46 | Cola | 10 | 102 | 3 |
| 2 | Home | 11 | 101 | 1 |
| 11 | Home | 11 | 101 | 2 |
| 21 | Home | 11 | 101 | 3 |
| 1 | Spicy | 11 | 104 | 1 |
| 3 | Spicy | 11 | 104 | 2 |
| 41 | Spicy | 11 | 104 | 3 |
----------- ------------- ------------------- ------------ ----------
Я хочу выбрать каждый набор данных в каждой группе на основе столбца row_num.
Каждая попытка приветствуется.
Комментарии:
1. Я понятия не имею, о чем вы спрашиваете, не могли бы вы добавить какое-нибудь объяснение и желаемый результат?
2. Опубликуйте ожидаемый результат
Ответ №1:
Хотя звучит так, как будто у вас уже есть ROW_NUMBER()
столбец, я считаю, что это то, о чем вы просите. Для первой записи для каждого PACKAGENAME
использования:
SELECT s.* FROM (
SELECT t.*,
ROW_NUMBER() OVER(PARTITION BY t.packagename ORDER BY t.packageid) as rnk
FROM YourTable t) s
WHERE s.rnk = 1
Для всех из них используйте только внутренний запрос.
Ответ №2:
Вот cte
версия, если вы хотите получить одну запись из каждой группы.
;with cte_1
as(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY [packagename],[package max units], [references] ORDER BY [packageid]) as row_Numb
FROM YourTable )
SELECT [packageid],[packagename],[package max units],[reference]
FROM cte_1
WHERE row_Numb = 1
Ответ №3:
Вы можете использовать TOP 1 со СВЯЗЯМИ с упорядочением по ROW_NUMBER():
SELECT TOP 1 WITH TIES *
FROM YourTable
ORDER BY ROW_NUMBER() OVER (PARTITION BY packagename ORDER BY packageid)
Вывод:
packageid packagename package max units references
44 Basic 10 103
42 Cola 10 102
2 Home 11 101
1 Spicy 11 104