MSSQL - row_number() 在视图中显示意外
MSSQL - row_number() in views display unexpected
我需要从不更改主视图的视图中获取行号 select,但它显示 select 编辑行编号的整体行号 table。
这是 table1 中的值:
field1
---------
aa
ab
ba
bb
bc
ca
cb
cc
我创建了这样的视图:
select field1, row_number() OVER (ORDER BY field1) as rowno
from table1
但是 select 显示总行数:
select *
from myview
where field1 like 'c%'
field1 rowno
-----------------
ca 6
cb 7
cc 8
而不是
field1 rowno
-----------------
ca 1
cb 2
cc 3
有机会做对吗?
那么你需要 subquery
:
select t.*
from (select field1, row_number() over (order by field1) as rowno
from table1
) t
where field1 like 'c%';
我想您在这里没有理解行号的概念。如果每次从该视图 selecting 时都需要从 1 开始行号,则不应 selecting 已在 select 中生成的 row_number 列视图的语句,相反,您必须在每个 select 语句中写下条件的 ROW_NUMBER() 部分,您 运行 反对视图。
你需要这样的东西:
SELECT fields1, ROW_NUMBER() OVER (ORDER BY field1) as rowno
FROM <viewname>
WHERE fields1 LIKE 'C%';
我需要从不更改主视图的视图中获取行号 select,但它显示 select 编辑行编号的整体行号 table。
这是 table1 中的值:
field1
---------
aa
ab
ba
bb
bc
ca
cb
cc
我创建了这样的视图:
select field1, row_number() OVER (ORDER BY field1) as rowno
from table1
但是 select 显示总行数:
select *
from myview
where field1 like 'c%'
field1 rowno
-----------------
ca 6
cb 7
cc 8
而不是
field1 rowno
-----------------
ca 1
cb 2
cc 3
有机会做对吗?
那么你需要 subquery
:
select t.*
from (select field1, row_number() over (order by field1) as rowno
from table1
) t
where field1 like 'c%';
我想您在这里没有理解行号的概念。如果每次从该视图 selecting 时都需要从 1 开始行号,则不应 selecting 已在 select 中生成的 row_number 列视图的语句,相反,您必须在每个 select 语句中写下条件的 ROW_NUMBER() 部分,您 运行 反对视图。 你需要这样的东西:
SELECT fields1, ROW_NUMBER() OVER (ORDER BY field1) as rowno
FROM <viewname>
WHERE fields1 LIKE 'C%';