Как мне выбрать каждый набор данных из Row_Number по разделу по таблице на основе Row_Number по разделу по столбцу?

#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