Jam*_*ers 1 sql sql-server sql-server-2008
我有一个包含以下值的表:
Value
0
1.2
1.3
1.4
0
1.2
1.3
1.4
Run Code Online (Sandbox Code Playgroud)
从上面的数据中,我需要将设置重置为0后的2个最高数字相加,从而得到总数2.8.
如果我每次有0都可以让row_number()重新启动,那将是完美的,但它不提供这样的功能.
谢谢.
DECLARE @your_table TABLE (id INT,value FLOAT)
INSERT INTO @your_table
SELECT 1,0 UNION ALL
SELECT 2,1.2 UNION ALL
SELECT 3,1.3 UNION ALL
SELECT 4,1.4 UNION ALL
SELECT 5,0 UNION ALL
SELECT 6,1.2 UNION ALL
SELECT 7,1.3 UNION ALL
SELECT 8,1.4
;WITH T AS
(
SELECT
ROW_NUMBER() OVER (PARTITION BY CASE WHEN value = 0 THEN 0 ELSE 1 END ORDER BY id)-
ROW_NUMBER() OVER (ORDER BY id ) AS Grp
,id,value
FROM @your_table
), T2 AS
(
SELECT MAX(value) AS value
FROM T
WHERE value<>0
GROUP BY Grp)
SELECT SUM(value)
FROM T2
Run Code Online (Sandbox Code Playgroud)