【发布时间】:2017-03-23 09:18:43
【问题描述】:
我想增加一列,然后根据另一列中的值停止并重新开始。
例如:
我有一张桌子:
CustomerID Reportdate True_False
9001 2013-01-01 0
9001 2013-02-01 0
9001 2013-03-01 0
9001 2013-04-01 1
9001 2013-05-01 0
9001 2013-06-01 1
9001 2013-07-01 1
9001 2013-08-01 0
9001 2013-09-01 1
9001 2013-10-01 0
9001 2013-11-01 0
9001 2013-12-01 0
9001 2014-01-01 1
9001 2014-02-01 1
9001 2014-03-01 0
9001 2014-04-01 0
9001 2014-05-01 0
9001 2014-06-01 0
9001 2014-07-01 0
9001 2014-08-01 0
9001 2014-09-01 1
9001 2014-10-01 1
9001 2014-11-01 1
9001 2014-12-01 1
9002 2013-01-01 0
9002 2013-02-01 0
9002 2013-03-01 0
9002 2013-04-01 1
9002 2013-05-01 1
9002 2013-06-01 1
9002 2013-07-01 0
9002 2013-08-01 1
9002 2013-09-01 0
9002 2013-10-01 1
9002 2013-11-01 1
9002 2013-12-01 1
9002 2014-01-01 1
9002 2014-02-01 0
9002 2014-03-01 0
9002 2014-04-01 0
9002 2014-05-01 0
9002 2014-06-01 0
9002 2014-07-01 1
9002 2014-08-01 1
9002 2014-09-01 1
9002 2014-10-01 0
9002 2014-11-01 1
9002 2014-12-01 0
想要的输出:
CustomerID Reportdate True_False Sequence
9001 2013-01-01 0 1
9001 2013-02-01 0 2
9001 2013-03-01 0 3
9001 2013-04-01 1 0
9001 2013-05-01 0 1
9001 2013-06-01 1 0
9001 2013-07-01 1 0
9001 2013-08-01 0 1
9001 2013-09-01 1 0
9001 2013-10-01 0 1
9001 2013-11-01 0 2
9001 2013-12-01 0 3
9001 2014-01-01 1 0
9001 2014-02-01 1 0
9001 2014-03-01 0 1
9001 2014-04-01 0 2
9001 2014-05-01 0 3
9001 2014-06-01 0 4
9001 2014-07-01 0 5
9001 2014-08-01 0 6
9001 2014-09-01 1 0
9001 2014-10-01 1 0
9001 2014-11-01 1 0
9001 2014-12-01 1 0
9002 2013-01-01 0 1
9002 2013-02-01 0 2
9002 2013-03-01 0 3
9002 2013-04-01 1 0
9002 2013-05-01 1 0
9002 2013-06-01 1 0
9002 2013-07-01 0 1
9002 2013-08-01 1 0
9002 2013-09-01 0 1
9002 2013-10-01 1 0
9002 2013-11-01 1 0
9002 2013-12-01 1 0
9002 2014-01-01 1 0
9002 2014-02-01 0 1
9002 2014-03-01 0 2
9002 2014-04-01 0 3
9002 2014-05-01 0 4
9002 2014-06-01 0 5
9002 2014-07-01 1 0
9002 2014-08-01 1 0
9002 2014-09-01 1 0
9002 2014-10-01 0 1
9002 2014-11-01 1 0
9002 2014-12-01 0 1
因此,序列字段将其操作数递增 1,其中“True_False”为 0,然后在“True_False”为 1 处停止,随后重复递增以创建所需输出中显示的序列。
欢迎大家帮忙,
CREATE TABLE test ( CustomerID bigint, DateKey date, True_false bit, ); insert into test values (9001,'2013-01-01','1'), (9001,'2013-02-01','0'), (9001,'2013-03-01','0'), (9001,'2013-04-01','0'), (9001,'2013-05-01','1'), (9001,'2013-06-01','1'), (9001,'2013-07-01','0'), (9001,'2013-08-01','0'), (9001,'2013-09-01','0'), (9001,'2013-10-01','0'), (9001,'2013-11-01','0'), (9001,'2013-12-01','1'), (9001,'2014-01-01','1'), (9001,'2014-02-01','0'), (9001,'2014-03-01','1'), (9001,'2014-04-01','0'), (9001,'2014-05-01','0'), (9001,'2014-06-01','1'), (9001,'2014-07-01','1'), (9001,'2014-08-01','0'), (9001,'2014-09-01','1'), (9001,'2014-10-01','0'), (9002,'2014-11-01','0'), (9002,'2014-12-01','0'), (9002,'2013-01-01','0'), (9002,'2013-02-01','0'), (9002,'2013-03-01','0'), (9002,'2013-04-01','1'), (9002,'2013-05-01','1'), (9002,'2013-06-01','0'), (9002,'2013-07-01','1'), (9002,'2013-08-01','1'), (9002,'2013-09-01','1'), (9002,'2013-10-01','1'), (9002,'2013-11-01','0'), (9002,'2013-12-01','1'), (9002,'2014-01-01','1'), (9002,'2014-02-01','0'), (9002,'2014-03-01','1'), (9002,'2014-04-01','1'), (9002,'2014-05-01','1'), (9002,'2014-06-01','0'), (9002,'2014-07-01','1'), (9002,'2014-08-01','1'), (9002,'2014-09-01','0'), (9002,'2014-10-01','0'), (9002,'2014-11-01','0'), (9002,'2014-12-01','0')
【问题讨论】:
-
@Veljko89 我不认为这很简单。分区会是什么?重置序列怎么样?
-
@TimBiegeleisen 你是对的......抱歉误导了
-
这看起来有点像this 问题。但是这个有更多的数据。
标签: sql sql-server tsql