首页 > 解决方案 > 如何在 SQL 中分配重复增量?

问题描述

在遍历 SQL 列时,如果我们在列中找到匹配“NEW”的文本Calc,则更新从列中的 1 开始的递增计数Results

在输出上应该是这样的:

在此处输入图像描述

标签: sql

解决方案


以下使用 id 列来解决订单问题。将其替换为相应的表达式。这也解决了以 1 开始显示序列并为“新”行显示 0 的要求。

SQL(更新):

SELECT logs.*
     , CASE WHEN text = 'NEW' THEN 0
            ELSE 
                COALESCE(SUM(CASE WHEN text = 'NEW' THEN 1 END) OVER (PARTITION BY xrank ORDER BY id)+1, 1)
            END AS display
  FROM logs
 ORDER BY id

结果:

+----+-------+------+---------+
| id | xrank | text | display |
+----+-------+------+---------+
|  1 |     1 | A    |       1 |
|  2 |     1 | B    |       1 |
|  3 |     1 | C    |       1 |
|  4 |     1 | NEW  |       0 |
|  5 |     1 | D    |       2 |
|  6 |     1 | Q    |       2 |
|  7 |     1 | B    |       2 |
|  8 |     1 | NEW  |       0 |
|  9 |     1 | D    |       3 |
| 10 |     1 | Z    |       3 |
| 11 |     2 | A    |       1 |
| 12 |     2 | B    |       1 |
| 13 |     2 | C    |       1 |
| 14 |     2 | NEW  |       0 |
| 15 |     2 | D    |       2 |
| 16 |     2 | Q    |       2 |
| 17 |     2 | B    |       2 |
| 18 |     2 | NEW  |       0 |
| 19 |     2 | D    |       3 |
| 20 |     2 | Z    |       3 |
+----+-------+------+---------+

推荐阅读