【问题标题】:MSSQL - row_number() in views display unexpectedMSSQL - 视图中的 row_number() 显示意外
【发布时间】:2018-06-12 12:39:18
【问题描述】:

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

这是 table1 中的值:

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

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

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

但选择显示整体行号:

select *
from myview 
where field1 like 'c%'


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

而不是

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

有机会做对吗?

【问题讨论】:

  • 不要将row_number 放在视图中。放在select子句中
  • 正如它所显示的那样,它是正确的...您将 rowno 放入视图中 - 在视图中,ca 在第 6 行,cb 在第 7 行...如果您想要您的结果编号,您必须在视图之外执行 rowno 调用。

标签: sql sql-server views row-number


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    那么你需要subquery 代替:

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

    【讨论】:

    • 我不能修改主查询,这是一个外部程序的选择*
    猜你喜欢
    • 2012-08-02
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多