运行 总数 (COUNT) SQL 服务器

Running total (COUNT) SQL Server

我目前有这个结果

 ID Code
 1  AAA12
 2  F5
 3  GOFK568
 4  G77
 5  JLKJ4
 6  FOG0

现在我想做的是创建第三列,使长度超过 4 的代码的总数保持 运行。

现在,我有这段代码,它给出了长度超过 4 的代码的总和。

 SELECT * ,
 SUM(CASE WHEN LENGTH(CODE) > 4 THEN 1 ELSE 0 END) AS [Count]
 FROM Table1;

但这给了我这个结果

 ID Code    Count
 1  AAA12   3

我正在寻找这样的结果

 ID Code    Running_Total
 1  AAA12         1
 2  F5            1
 3  GOFK568       2
 4  G77           2
 5  JLKJ4         3
 6  FOG0          3

我正在做类似的事情

 SELECT * ,
 CASE WHEN LENGTH(CODE) > 4 THEN (SUM(Code) OVER (PARTITION BY ID)) ELSE END 
 AS [Count]
 FROM Table1;

但它仍然没有给我 运行 总数。

我有一个 SQL Fiddle 页面

http://sqlfiddle.com/#!9/2746c/18

任何帮助都会很棒

求和的大小写:

SELECT Table1.* ,
SUM(case when len(Code) > 4 then 1 else 0 end) OVER (order BY ID) as counted
FROM Table1;

在 Sql Server 2012+ 中你可以使用 Sum() Over(Order by) 函数

SELECT Sum(CASE WHEN Len(code) > 4 THEN 1 ELSE 0 END)
         OVER(ORDER BY id)
FROM   Yourtable

旧版本

SELECT *
FROM   Yourtable a
       CROSS apply (SELECT Count(*)
                    FROM   Yourtable b
                    WHERE  a.ID >= b.ID
                           AND Len(code) > 4) cs (runn) 

ANSI SQL 方法

SELECT ID,Code,
       (SELECT count(*)
        FROM   Yourtable  b
        WHERE  a.ID >= b.ID and char_length(code) > 4) AS runn
FROM   Yourtable a 

这里有一些好的和有效的答案。 但如果您想尝试不同的方法,请尝试以下查询:

SELECT
t1.*,
(Select sum(r.cnt) from 
 (SELECT COUNT(t2.code) as cnt FROM table1 AS t2 
  WHERE t2.Id <= t1.Id 
  group by t2.code 
  having len(t11.code) > 4) r
) AS Count
FROM table1 AS t1;

这是DEMO

希望对您有所帮助!