基于分区和行号的 TSql Return 列
TSql Return column based on partition and rownumber
我有一个 SQL 服务器 table 我正在尝试获取计算列 -
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 的所有值。我不确定如何通过子句构建分区来实现这一点。
怎么样
CEILING(ROW_NUMBER() OVER(ORDER BY RowId ASC) / 3.0)
我有一个 SQL 服务器 table 我正在尝试获取计算列 - 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 的所有值。我不确定如何通过子句构建分区来实现这一点。
怎么样
CEILING(ROW_NUMBER() OVER(ORDER BY RowId ASC) / 3.0)