Sql server 基于分区和行号的TSql返回列

Sql server 基于分区和行号的TSql返回列,sql-server,tsql,rank,row-number,partition-by,Sql Server,Tsql,Rank,Row Number,Partition By,我有一个SQL server表,试图在其中获取一个计算列- MyPartition-基于变量@segment指示分区的编号。例如,如果@segment=3,则以下输出为真 RowID | RowName | MyPartition ------ | -----------| ------- 1 | My Prod 1 | 1 2 | My Prod 2 | 1 3 | My Prod 3 | 1 4 | My Prod 4 | 2 5

我有一个SQL server表,试图在其中获取一个计算列- MyPartition-基于变量@segment指示分区的编号。例如,如果@segment=3,则以下输出为真

RowID  | RowName    | MyPartition
------ | -----------| -------
1      | My Prod 1  | 1
2      | My Prod 2  | 1
3      | My Prod 3  | 1
4      | My Prod 4  | 2
5      | My Prod 5  | 2
6      | My Prod 6  | 2
7      | My Prod 7  | 3
8      | My Prod 8  | 3
9      | My Prod 9  | 3
10     | My Prod 10 | 4
到目前为止,我得到的是:

SELECT 
    RowId,
    RowName,
    ROW_NUMBER() OVER(PARTITION BY RowId ORDER BY RowId ASC) AS MyPartition
FROM MyTable
ORDER BY RowId
但正如您所猜测的那样,分区只是rowid上的分区,给出了mypartition=1的所有值。我不确定如何构造partitionby子句来实现这一点。

如何

CEILING(ROW_NUMBER() OVER(ORDER BY RowId ASC) / 3.0)

您是否试图在给定分组中最多放置@segment元素?也就是说,根据上面的例子,您似乎需要三个1,三个2,等等。