运行 总数 (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
希望对您有所帮助!
我目前有这个结果
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
希望对您有所帮助!