2017-01-06 13 views
-1

私は内部にLEFT OUTER JOINを持つストアドプロシージャを作成しています。今では、別々の外部キーの総数を持つすべての行をn番目に戻す必要があります(10としましょう)。SQL - n番目の異なる外部キーの行番号を取得

+----+---------------+----------------+--------------+---------------+ 
    | FK | Name   | UserName  | Asignee  | Comment  | 
    +----+---------------+----------------+--------------+---------------+ 
    | 31 | Test Agent... | Manny Virk  | Sumit Sharda | Test Agent... | 
    | 31 | Test Agent... | Manny Virk  | Manny Virk | Test Agent... | 
    | 32 | Test Agent... | Manny Virk  | Gary Pannu | test   | 
    | 32 | Test Agent... | Manny Virk  | Sunny Tiwana | test   | 
    | 32 | Test Agent... | Manny Virk  | Manny Virk | test   | 
    | 33 | Test Agent... | Rachel Stalony | Gary Pannu | test   | 
    | 33 | Test Agent... | Rachel Stalony | Sunny Tiwana | test   | 
    | 33 | Test Agent... | Rachel Stalony | Manny Virk | test   | 
    | 34 | Test Agent... | Manny Virk  | Gary Pannu | test   | 
    | 34 | Test Agent... | Manny Virk  | Sunny Tiwana | test   | 
    | 34 | Test Agent... | Manny Virk  | Manny Virk | test   | 
    | 35 | Test TeamW... | Manny Virk  | Sunny Tiwana | adsf asdf ... | 
    | 35 | Test TeamW... | Manny Virk  | Manny Virk | adsf asdf ... | 
    | 36 | New Agent ... | Manny Virk  | Sumit Sharda | Test comme... | 
    | 36 | New Agent ... | Manny Virk  | Sunny Tiwana | Test comme... | 
    | 36 | New Agent ... | Manny Virk  | Manny Virk | Test comme... | 
    | 37 | Test TeamW... | Manny Virk  | Sunny Tiwana | Some comme... | 
    | 37 | Test TeamW... | Manny Virk  | Manny Virk | Some comme... | 
    | 38 | qwer qwer.... | Manny Virk  | Sunny Tiwana | some new c... | 
    | 38 | qwer qwer.... | Manny Virk  | Manny Virk | some new c... | 
    | 42 | asdfsafdsa... | Manny Virk  | Gary Pannu | NULL   | 
    | 42 | asdfsafdsa... | Manny Virk  | Manny Virk | NULL   | 
    | 43 | 20161214 J... | Manny Virk  | Gary Pannu | My Test co... | 
    | 43 | 20161214 J... | Manny Virk  | Sunny Tiwana | My Test co... | 
    | 41 | Happy Wedd... | Manny Virk  | Gary Pannu | Svi togeth... | 
    | 41 | Happy Wedd... | Manny Virk  | Manny Virk | Svi togeth... | 
    | 44 | Call all l... | Manny Virk  | Sumit Sharda | Call all l... | 
    | 44 | Call all l... | Manny Virk  | Manny Virk | Call all l... | 
    | 45 | Reperition... | Manny Virk  | Gary Pannu | NULL   | 
    | 45 | Reperition... | Manny Virk  | Manny Virk | NULL   | 
    | 46 | Some Task  | Manny Virk  | Sumit Sharda | Some Task ... | 
    | 46 | Some Task  | Manny Virk  | Manny Virk | Some Task ... | 
    | 47 | asdf   | Manny Virk  | Sumit Sharda | 6twdfwu  | 
    | 47 | asdf   | Manny Virk  | Manny Virk | 6twdfwu  | 
    | 48 | Test Daily... | Manny Virk  | Sumit Sharda | Test Daily... | 
    | 48 | Test Daily... | Manny Virk  | Manny Virk | Test Daily... | 
    | 49 | Test Weekl... | Manny Virk  | Sumit Sharda | Test Weekl....| 
    +----+---------------+----------------+--------------+---------------+ 

私はそれが最後の10番目の明確なFKだから手続きが私= 43すべてのFKを含め= 43 FKまでのすべての行を返すようにしたい:例えば

は私のテーブルはこのようになっていることを言うことができます!

誰でもこの目的でSQLを書くのを手伝ってもらえますか?標準SQLでこれを行うの

+1

ご使用のデータベースに質問にタグを付けてください。 –

+0

@ GordonLinoff申し訳ありませんが、バージョン12のsql-serverのタグを追加するのを忘れました。 – Sicha

+0

@ GurV私は、個別の行のみを使用してテンポラリテーブルを作成しようとしましたが、それらのFKと一緒に、しかし、私はそれを正しく書いて、複数の選択と一時テーブルを持つ "ハンマー" DBにではなく、方法がなければならないことを知っているので、それは悪い解決策でした。 – Sicha

答えて

1

一つの方法は次のとおりです。

select t.* 
from t 
where t.fk in (select t2.fk 
       from t t2 
       group by t2.fk 
       order by t2.fk 
       fetch first 10 rows only 
      ); 

正確な構文は、特にfetch first句のために、データベースによって異なる場合があります。

+0

Thx Gordonこれは実際にそれを行いました。もちろん、 "t"テーブルを "取得"するために少しのストア手順を変更する必要がありましたが、実際には魅力的に機能します。ありがとう! – Sicha

0
select 
FK,Name,UserName,Asignee,Comment  
from 
(

select 
FK,Name,UserName,Asignee,Comment  
,dense_rank() over (order by FK) dr 
from table 
) a 
where dr<=10 
関連する問題