Sql 按条件递增其值的连续数字列
是否有一种方法可以创建一个列,该列的运行编号可以在另一列中的值具有特定值时将其值增加1?例如,如果我们有Sql 按条件递增其值的连续数字列,sql,Sql,是否有一种方法可以创建一个列,该列的运行编号可以在另一列中的值具有特定值时将其值增加1?例如,如果我们有 colA a c change b c b change b a . . . 那么我想要 colA colB a 1 c 1 change 2 b 2
colA
a
c
change
b
c
b
change
b
a
.
.
.
那么我想要
colA colB
a 1
c 1
change 2
b 2
c 2
b 2
change 3
b 3
a 3
. .
. .
. .
您尚未指定订购方式,因此我将使用idColumn:
以下所有解决方案都假设您有一些明确的orderCriteria,您可以根据这些orderCriteria对事件进行排序 以下是使用PostgreSQL 9.4的方法: 下面是使用任何其他支持窗口功能的RDBMS的方法: 其中包括CUBRID、DB2、Firebird 3、HANA、Informix、Oracle、PostgreSQL、Redshift、SQL Server、Sybase SQL Anywhere等
SELECT
colA,
COUNT(CASE WHEN colA = 'change' THEN 1 END) OVER (ORDER BY orderCriteria) + 1 colB,
FROM my_table
ORDER BY orderCriteria
以下是使用任何其他RDBMS的方法:
您使用的是哪种数据库管理系统?博士后?Oracle?您使用的是哪种数据库管理系统?是否也有id列或类似列?能否请您对您遇到的问题再添加一点说明?colB=SELECT。。。是无效的标准SQL。您不能在SELECT语句中执行这样的赋值。@a_horse_with_no_name:您是对的,因为OP没有指定他或她的rdbms,我使用了t-SQL。然而,这种方法适用于任何数据库,您只需稍加修改即可。
SELECT
colA,
COUNT(*) FILTER (WHERE colA = 'change') OVER (ORDER BY orderCriteria) + 1 colB,
FROM my_table
ORDER BY orderCriteria
SELECT
colA,
COUNT(CASE WHEN colA = 'change' THEN 1 END) OVER (ORDER BY orderCriteria) + 1 colB,
FROM my_table
ORDER BY orderCriteria
SELECT
colA,
(SELECT COUNT(*)
FROM my_table t2
WHERE t2.orderCriteria <= t1.orderCriteria
AND t2.colA = 'change') + 1 colB
FROM my_table t1
ORDER BY orderCriteria