视图中的MSSQL - row_number()显示意外

时间:2018-06-12 12:39:18

标签: sql sql-server views row-number

我需要从视图中获取行号而不更改主选择,但它显示所选行rumber的整体rownumber表。

这里是table1中的值:

field1
---------
aa
ab
ba
bb
bc
ca
cb
cc

我创建了一个这样的视图:

select field1, row_number() OVER (ORDER BY field1) as rowno
from table1

但是select会显示整个rownumbers:

select *
from myview 
where field1 like 'c%'


field1      rowno
-----------------
ca          6
cb          7
cc          8

而不是

field1      rowno
-----------------
ca          1
cb          2
cc          3

有机会把它弄好吗?

2 个答案:

答案 0 :(得分:1)

我猜你没有在这里得到行号的概念。如果每次从该视图中选择时都需要从1开始的行号,则不应该选择已在视图的select语句中生成的row_number列,而是必须编写条件的ROW_NUMBER()部分在针对视图运行的每个select语句中。 你需要这样的东西:

SELECT fields1, ROW_NUMBER() OVER (ORDER BY field1) as rowno
FROM <viewname>
WHERE fields1 LIKE 'C%';

答案 1 :(得分:0)

然后您需要subquery代替:

select t.*
from (select field1, row_number() over (order by field1) as rowno
      from table1
     ) t
where field1 like 'c%';