Stored procedures 从数据库表检索行(查询错误)
我有一个数据库,其中有一个表Stored procedures 从数据库表检索行(查询错误),stored-procedures,sql-server-2008-r2,Stored Procedures,Sql Server 2008 R2,我有一个数据库,其中有一个表book(id、名称、显示、优先级) 例如: ________________________________________________________ | id | name | display | priority | -------------------------------------------------------- | 1 | test1 | True
book
(id、名称、显示、优先级
)
例如:
________________________________________________________
| id | name | display | priority |
--------------------------------------------------------
| 1 | test1 | True | 5 |
| 2 | test2 | True | 3 |
| 3 | test3 | False | 4 |
| 4 | test4 | True | 1 |
| 5 | test5 | True | 2 |
| 6 | test6 | False | 1 |
| 7 | test7 | True | 1 |
| 8 | test8 | True | 4 |
| 9 | test9 | True | 3 |
| 10 | test10 | False | 2 |
| 11 | test11 | True | 3 |
| 12 | test12 | True | 5 |
--------------------------------------------------------
我需要编写一个查询,以仅获取优先级为1、2和3的3行,并且display为true
我使用此存储过程显示优先级为1、2和3的书籍(最特定的书籍)
问题:
选择按优先级排序的前3行时
查询将获得优先级为1的前3行,而我需要优先级为1的1-record和优先级为2的1-record以及优先级为3的1-record不同的书籍时,不同的书籍会覆盖所有记录,而不仅仅是优先级
________________________________________________________
| id | name | display | priority |
--------------------------------------------------------
| 4 | test4 | True | 1 |
| 2 | test2 | True | 3 |
| 5 | test5 | True | 2 |
--------------------------------------------------------
我该怎么做
感谢您的帮助试试这个:
with cte as (
select *,row_number() over(partition by priority order by id) as row_num
from book
where display='true'
and priority in (1,2,3)
)
select id,name,display,priority
from cte
where row_num=1
我正在优先使用sql server 2008 R2,我们如何决定检索哪一行?我们(和sql server)需要您定义我们可以遵循的实际规则。它不是“id值最低的一个”,因为您选择了
id
9作为priority
3,而不是id
2。请您解释一下这个查询?据我所知,你先创建一个视图,然后从中获取信息。over
是什么意思?什么是partition
?它可以选择优先级为4或5的行,即使它选择了优先级为1、2和3的行,它也会选择id为2的行,而不是优先级为3的行。我在上面设置了一个示例,我需要查询以获得3条记录。(第一个是找到的优先级为1、2或3且显示=true的第一行查询)(第二个是找到的优先级为1、2或3且显示=true的第二行查询)(第三个是找到的优先级为1、2或3且显示=true的第三行查询)@Damien_不信者:好的观点,我已根据您评论的第一部分更正了我的答案,关于第二部分,问题(不是您的问题,发布的问题)对此不清楚……我发现问题已更新为使用id
2,而不是现在的9。如果OP真的能清楚地表达规则,我会更高兴,也就是说,它现在看起来是“每个优先级中最低的id
值”