2

テーブルを持つデータベースがありますbook( id, 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        |
 --------------------------------------------------------

優先度 1 と 2 と 3 の 3 行のみを取得するクエリを作成する必要があり、表示は true です

このストアド プロシージャを使用して、優先度が 1、2、3 の本 (最も具体的な本) を表示します。

問題:

  1. クエリが最初の 3 行を優先度 = 1 で取得しようとするとselect top 3 order by priority、優先度 = 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 に答える