运行总计(COUNT)SQL Server

时间:2017-10-18 09:50:16

标签: sql sql-server running-total

我目前有这个结果

 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小提琴页面

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

任何帮助都会很棒

3 个答案:

答案 0 :(得分:3)

将案例放在总和中:

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

答案 1 :(得分:2)

在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 

答案 2 :(得分:0)

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

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

希望它有所帮助!