SQL Server计算从排序表开始的行数,其中colvalue = 0

时间:2016-01-20 11:29:40

标签: sql-server sql-server-2008-r2

我们有SQL Server 2008 R2。我有表MyTable

我需要:

  1. 按列Nr (ORDER BY MyTable.NR)

  2. 排序
  3. 从此排序表的开头计算多少个值等于0(请记住它已经按NR排序)(MyTable.Value = 0)。

  4. 例如,如果MyTable具有以下值:

    NR Value
    2  0
    1  0
    3  5
    4  0
    

    然后我必须得到count = 2,因为如果按Nr排序这个表,我们有两行,其中Value = 0,从表的开头。

2 个答案:

答案 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
        );

答案 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;