简体   繁体   English

如何根据“按行划分的行数”表从“按行划分的行数”表中选择每个数据集?

[英]How do I select each data set from a Row_Number Over Partition by table based on the Row_Number Over Partition by column?

How do I select each data set from a Row_Number Over Partition by table based on the Row_Number Over Partition by column? 如何根据“按行划分的行数”表从“按行划分的行数”表中选择每个数据集?

please diagram below: 请如下图:

+-----------+-------------+-------------------+------------+----------+
| 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        |
+-----------+-------------+-------------------+------------+----------+

I want select each data set in each group based on the row_num column. 我想基于row_num列选择每个组中的每个数据集。

Every attempt is welcomed. 欢迎一切尝试。

Although it sounds like you already have the ROW_NUMBER() column, I believe it is what you are asking for . 尽管听起来您已经有了ROW_NUMBER()列,但我相信这是您所要的。 For the first record for each PACKAGENAME use: 对于每个PACKAGENAME的第一条记录, 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

For all of them use only the inner query. 对于所有这些,仅使用内部查询。

Here is the cte version, if you want to fetch single record from each group. 如果您要从每个组中获取单个记录,则这是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

You can use TOP 1 WITH TIES with ordering by ROW_NUMBER(): 您可以按排ROW_NUMBER()的顺序使用TOP 1 WITH TIES:

SELECT TOP 1 WITH TIES *
FROM YourTable
ORDER BY ROW_NUMBER() OVER (PARTITION BY packagename ORDER BY packageid)

Output: 输出:

packageid   packagename package max units   references
44          Basic       10                  103
42          Cola        10                  102
2           Home        11                  101
1           Spicy       11                  104

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM