2016-01-20 59 views
1

我们有SQL Server 2008 R2。我有表MyTableSQL Server计算排序表开头的行数,其中colvalue = 0

我需要:

  1. 排序列Nr (ORDER BY MyTable.NR)

  2. 算多少值等于0,从这个排序表的开始(以记住,它已经被NR排序) (MyTable.Value = 0)。

例如,如果MyTable有这些值:

NR Value 
2 0 
1 0 
3 5 
4 0 

然后我得数= 2,因为如果排序该表由NR我们有两排,其中value =从0开始的表格。

+0

你做了什么/试过这么远,你的具体问题在哪里? –

回答

2

可以使用NOT EXISTS排除其中一排较低的NRValue <> 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 
     ); 
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;