我希望这不是一次重复的讨论。我确实搜索了论坛,但没有发现任何与我的问题有关的内容。顺便说一句,我喜欢这个网站。它帮了我几年了,我通常会通过搜索这个网站来解决所有问题。
无论如何,我在SQL中遇到了一个带有ROW_NUMBER()函数的问题。我创建了一个涉及连接不同视图和表的视图,在视图中我从视图和表中提取了字段,但我还创建了两个字段,即一个名为seq_number的ROW_Number()字段和另一个名为seq_alpha的字段。
Seq Number字段为:
ROW_NUMBER()结束(按book_date,room,start排序)为seq_number,
seq_alpha字段是一个案例字段,它基于行号来代替字母。
例如
案例ROW_NUMBER()结束(按book_date,Room,Start排序) 当1然后' A' 当2然后' B' 然后3,然后' C' .... 以seq_alpha结尾
当我为测试目的创建视图时,我使用了WHERE子句,一切都按照应有的方式工作。然后我注释掉了Where子句并创建了表。
然后在创建视图后,我尝试拉出创建的视图,并使用与创建视图时相同的Where子句,但现在就像:
选择* 来自created_view 在哪里(与我用于测试的相同)
但现在发生的是seq_number字段查看整个视图而不是让where子句过滤掉结果。所有其他数据都正确,但seq_number和seq_alpha字段没有。因此,在我的22个结果中,seq数量不是1-22,而是400,000范围,而seq_alpha字段甚至没有显示任何内容,因为在我的情况下我只达到了51。
在创建row_number字段并且字段没有使用where子句过滤结果时,是否有人遇到过类似的问题?
提前感谢您的帮助!
修改 在Mikael的回复之后,我似乎不太可能在视图中创建row_number字段,然后查询视图并让它以我想要的方式工作。那么,我的下一个问题是有没有办法根据我可以放在视图中的行号创建一个alpha序列,并且能够稍后查询并能够根据where子句让它正常工作?或者我每次拉这个视图时都需要创建alpha序列字段?
Ĵ
答案 0 :(得分:0)
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&lt;查询视图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子句。