add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
/* DATA SETUP */
CREATE TABLE #Table (SortID int IDENTITY(1,1), BitValue bit);
INSERT INTO #Table (BitValue)
VALUES (0), (1), (1), (1), (0), (1), (1);

SELECT * FROM #Table;

SortID BitValue
1 False
2 True
3 True
4 True
5 False
6 True
7 True
/* ANSWER */

DECLARE @a int;
SET @a = 2;

WITH Grouped_BitValues AS
(SELECT SortID, BitValue,
CASE WHEN BitValue = 0 THEN 1 ELSE 0 END AS NewGrpFlag,
SUM(CASE WHEN BitValue = 0 THEN 1 ELSE 0 END) OVER (ORDER BY SortID) AS GroupNum
FROM #Table
)
SELECT BitValue, POWER(@a, ROW_NUMBER() OVER (PARTITION BY GroupNum ORDER BY SortID) -1) AS Geometric_Sequence
FROM Grouped_BitValues
ORDER BY SortID;

BitValue Geometric_Sequence
False 1
True 2
True 4
True 8
False 1
True 2
True 4
/* CTE Component */

SELECT SortID, BitValue,
CASE WHEN BitValue = 0 THEN 1 ELSE 0 END AS NewGrpFlag,
SUM(CASE WHEN BitValue = 0 THEN 1 ELSE 0 END) OVER (ORDER BY SortID) AS GroupNum
FROM #Table;

SortID BitValue NewGrpFlag GroupNum
1 False 1 1
2 True 0 1
3 True 0 1
4 True 0 1
5 False 1 2
6 True 0 2
7 True 0 2
/* ALL DATA (WITH @a = 2) */

WITH Grouped_BitValues AS
(SELECT SortID, BitValue,
CASE WHEN BitValue = 0 THEN 1 ELSE 0 END AS NewGrpFlag,
SUM(CASE WHEN BitValue = 0 THEN 1 ELSE 0 END) OVER (ORDER BY SortID) AS GroupNum
FROM #Table
)
SELECT Grouped_BitValues.*, POWER(2, ROW_NUMBER() OVER (PARTITION BY GroupNum ORDER BY SortID) -1) AS Geometric_Sequence
FROM Grouped_BitValues
ORDER BY SortID;

SortID BitValue NewGrpFlag GroupNum Geometric_Sequence
1 False 1 1 1
2 True 0 1 2
3 True 0 1 4
4 True 0 1 8
5 False 1 2 1
6 True 0 2 2
7 True 0 2 4