2

我有一个带有表的数据库bookid, name, display, priority

例如:

 ________________________________________________________
|    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        |
 --------------------------------------------------------

我需要编写一个查询以仅获取 3 行优先级为 1 和 2 和 3 并且显示为真

我使用这个存储过程来显示优先级为 1 和 2 和 3 的书籍(最具体的书籍)

问题

  1. 当我尝试select top 3 order by priority查询获取优先级 = 1 的前 3 行时,我需要优先级 = 1 的 1 条记录和优先级 = 2 的 1 条记录和优先级 = 3 的 1 条记录。

  2. 当我尝试获取时distinct book,不同的作品对所有记录都不是优先级的

结果:

我需要结果如下:

 ________________________________________________________
|    id    |    name    |    display    |    priority    |
 --------------------------------------------------------
|    4     |    test4   |     True      |       1        |
|    2     |    test2   |     True      |       3        |
|    5     |    test5   |     True      |       2        |
 --------------------------------------------------------

我怎样才能做到这一点?

感谢帮助

4

1 回答 1

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
于 2012-10-03T06:30:28.133 回答