2016-06-02 7 views
0

私は2つのテーブルAとBとジョインテーブルMを持っています。それぞれのA.idに対して、テーブル2のB.idのソート順を取得します。以下の結果が得られます。これは私が、私は、彼らは1に等しく、すべてのM.AId行を選択し、それを並べ替え、および2によって制限できることを知っているが、私はすべての行に対してこれを行う必要がありAzureのSQLデータベース結合された行のソート数を制限する

Table A   Table M   Table B 
+-----+ +-----+-----+-------+ +-----+ 
| Id | | AId | BId | Value | | Id | 
+-----+ +-----+-----+-------+ +-----+ 
| 1 | | 1 | 3 |  4 | | 1 | 
| 2 | | 1 | 2 |  3 | | 2 | 
| 3 | | 3 | 2 |  3 | | 3 | 
| 4 | | 3 | 5 |  6 | | 4 | 
+-----+ | 3 | 3 |  4 | | 5 | 
      | 4 | 1 |  2 | +-----+ 
      | 4 | 2 |  1 | 
      | 4 | 4 |  3 | 
      +-----+-----+-------+ 

       Result 
      +-----+-----+-------+ 
      | AId | BId | Value | 
      +-----+-----+-------+ 
      | 1 | 3 |  4 | 
      | 1 | 2 |  3 | 
      | 3 | 5 |  6 | 
      | 3 | 3 |  4 | 
      | 4 | 1 |  2 | 
      | 4 | 4 |  3 | 
      +-----+-----+-------+ 

上で実行されています表A.私はgroup byを使用しようとしましたが、どのように分類して制限するかはわかりませんでした。また、この問題に関連するリソースを検索しようとしましたが、リソースが見つかりませんでした。

(私もどのように単語、この問題のためにタイトルをに確認されませんでした)

+0

を? –

+0

AzureのSQLデータベース –

答えて

1

あなただけROW_NUMBER使用することができます:あなたはどのようなRDBMSを使用している

SELECT 
    AId, BId, Value 
FROM (
    SELECT *, 
     Rn = ROW_NUMBER() OVER(PARTITION BY AId ORDER BY Value DESC) 
    FROM M 
) t 
WHERE Rn <= 2 
+0

'Rn = ROW_NUMBER()OVER(PARTITION BY AI DESD BY DESC)'で何が起こっているのかを説明できますか、それは私が理解するのに苦労している部分です。 –

+0

@JoeC私の答えにリンクを追加しました。うまくいけば、それは助けになるだろう。 –

+0

PARTITION BYは概念的にMを各AIdの個々のテーブルに分割しています。そして、結果セットのように操作しています。 –

関連する問題