我目前有这个结果
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
任何帮助都会很棒
答案 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
希望它有所帮助!