我们有SQL Server 2008 R2。我有表MyTable
。
我需要:
按列Nr (ORDER BY MyTable.NR)
从此排序表的开头计算多少个值等于0(请记住它已经按NR排序)(MyTable.Value = 0
)。
例如,如果MyTable
具有以下值:
NR Value
2 0
1 0
3 5
4 0
然后我必须得到count = 2,因为如果按Nr排序这个表,我们有两行,其中Value = 0,从表的开头。
答案 0 :(得分:2)
您可以使用NOT EXISTS
执行此操作,以排除存在行的所有行,NR
和Value
<> 0.例如
DECLARE @T TABLE (NR INT, Value INT);
INSERT @T VALUES (2, 0), (1, 0), (3, 5), (4, 0);
SELECT COUNT(*)
FROM @T AS t1
WHERE t1.Value = 0
AND NOT EXISTS
( SELECT 1
FROM @T AS t2
WHERE t2.Value <> 0
AND t2.NR < t1.NR
);
答案 1 :(得分:0)
您可以使用谓词Value = 0
过滤数据,然后使用row_number
过滤数据,然后计算行数,其中指定的数字等于原始数据:
declare @data table (NR int, Value int);
insert into @data values
(2, 0), (1, 0), (3, 5), (4, 0);
;with
step1 as (select NR from @data where Value = 0),
step2 as (select NR, rn = row_number() over (order by NR) from step1)
select count(1)
from step2
where NR = rn;