2016-01-20 49 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;