sql Row_Number函数在表中创建后不工作



我希望这不是一个重复的讨论。我确实搜索了论坛,没有找到任何与我的问题相关的东西。顺便说一下,我喜欢这个网站。它已经帮了我好几年了,我通常会通过搜索这个网站来解决我所有的问题。

无论如何,我在SQL中遇到了ROW_NUMBER()函数的问题。我创建了一个视图,它涉及到连接一个不同的视图和一个表,在视图中,我从视图和表中提取字段,但我还创建了两个字段,即ROW_Number()字段seq_number和另一个字段seq_alpha。

Seq Number字段为:

ROW_NUMBER() over(order by book_date, room, start) as seq_number

seq_alpha字段是一个大小写字段,它基于行号来给出一个字母。

例如

case ROW_NUMBER() over(order by book_date, Room, Start)当1然后'A'当2时,则"B"when 3 then 'C'….以seq_alpha结尾

当我为测试目的创建视图时,我使用了WHERE子句,并且一切都按照它应该的方式工作。然后注释掉Where子句并创建表。

然后在视图创建后,我试图拉创建的视图,并使用创建视图时工作的相同Where子句,但现在这样做:

select *从created_viewwhere(与我用于测试的相同)

但是现在发生的是seq_number字段查看整个视图,而不是让where子句过滤掉结果。所有其他数据都可以正确提取,但seq_number和seq_alpha字段不能。因此,在我的22个结果中,seq数字不是1-22,而是400,000范围,seq_alpha字段甚至不显示任何内容,因为在我的情况下,我只增加了51。

是否有人有类似的问题,试图拉row_number字段后,它被创建和字段不过滤的结果与where子句?

提前感谢您的帮助!

编辑在Mikael的响应之后,我似乎不太可能在视图中创建row_number字段,然后查询视图,并使其按我想要的方式工作。所以,我的下一个问题是,是否有一种方法来创建基于行号的阿尔法序列,我可以在视图中,并能够查询以后,并能够有它的工作正确基于where子句?还是我只需要在每次拉视图时创建alpha序列字段?

J

row_number()枚举在where子句应用后执行时所看到的行。

这将枚举整个表

select ID, 
       row_number() over(order by ID) as rn
from YourTable

,这将枚举ID <10

select ID,
       row_number() over(order by ID) as rn
from YourTable
where ID < 10

如果创建一个查询整个表的视图

create view ViewYourTable as
select ID,
       row_number() over(order by ID) as rn
from YourTable

,然后用where子句ID <10

select T.*
from ViewYourTable as T
where T.ID < 10

您所做的与使用派生表相同。

select T.*
from (
     select ID,
            row_number() over(order by ID) as rn
     from YourTable
     ) as T
where T.ID < 10

where子句在枚举行之后应用。

相关内容

  • 没有找到相关文章

最新更新