如何在SQL视图中基于另一列生成递增编号?
填充Number列的SQL解决方案
你当前的SQL里,RESULT为TRUE时的编号逻辑是对的(按Record排序生成从2开始的连续号),但ELSE设为0不符合需求。结合这类场景的常见需求(推测你截图里FALSE行的Number要和最近的TRUE行编号一致),可以这么改:
先标记TRUE行的目标编号
先给RESULT=TRUE的行生成编号,FALSE行暂时留空:SELECT Record, RESULT, CASE WHEN RESULT = TRUE THEN ROW_NUMBER() OVER (ORDER BY Record) + 1 ELSE NULL END AS temp_number FROM 你的视图名称补全FALSE行的编号
用窗口函数把FALSE行的编号填充成最近的TRUE行的编号:SELECT Record, RESULT, LAST_VALUE(temp_number IGNORE NULLS) OVER (ORDER BY Record ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS Number FROM ( SELECT Record, RESULT, CASE WHEN RESULT = TRUE THEN ROW_NUMBER() OVER (ORDER BY Record) + 1 ELSE NULL END AS temp_number FROM 你的视图名称 ) t
如果你的数据库不支持IGNORE NULLS(比如低版本MySQL),换用MAX()函数也能实现:
SELECT Record, RESULT, MAX(temp_number) OVER (ORDER BY Record ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS Number FROM ( SELECT Record, RESULT, CASE WHEN RESULT = TRUE THEN ROW_NUMBER() OVER (ORDER BY Record) + 1 ELSE NULL END AS temp_number FROM 你的视图名称 ) t
要是你截图里FALSE行的Number有其他规则(比如就是要和TRUE行的编号不相关的特定值),可以把具体规则说清楚,再调整语句。
内容的提问来源于stack exchange,提问作者Mr. X
相关产品推荐
相关产品推荐

