2

我想在我的存储过程的选择查询中有一个行计数器,但计数器不会为每一行增加。增量将取决于其中一个字段的值。相当于这个无效代码的东西:

DECLARE @RowIndex as int
SET @RowIndex = 0
SELECT
   f1, f2, f3,
   CASE
      WHEN f1 > 3 THEN @RowIndex += 1
      ELSE @RowIndex
   END AS MyIndex
FROM
   MyTable

我应该如何在 SQL Server 2005 中做到这一点?

4

2 回答 2

1
SELECT f1,f2,f3, DENSE_RANK() OVER (ORDER BY tempf1)-1 AS myIndex
FROM
(
  SELECT f1, f2, f3, CASE WHEN f1>3 THEN f1 ELSE 0 END AS tempf1
  FROM
  MyTable
) AS A

请使用 Dense_Rank() 和 f1 的顺序,如上。试试这个。

于 2012-02-28T16:38:39.813 回答
0

要在单个查询中执行此操作,您必须将表连接回自身以获取符合您条件的行数或之前的行。此外,您肯定需要一个对表格进行排序的列。在这种情况下,我们将该列称为 f2。

SELECT a.f1, a.f2, a.f3
    , SUM(CASE WHEN b.f1 > 3 THEN 1 ELSE 0 END) AS MyIndex
FROM MyTable a
JOIN MyTable b
    ON a.f2 >= b.f2
GROUP BY a.f1, a.f2, a.f3
于 2012-02-28T16:42:44.630 回答