2017-04-25 5 views
0

特定のIDの2番目の行を取得するスクリプトを生成しようとしています。 私の最初のクエリは正しく行います。私はIDのリストを入れようとすると、1つの結果しか得られません。行番号を使用してSQLクエリからリストを生成する

複数の結果を表示するには、更新クエリを調整する必要がありますか?

オリジナルクエリ

;WITH YourTable AS(
      SELECT TOP 2 
      EHistory.*, 
      ROW_NUMBER() over (order by SignonDate desc) as RowNumber 
      FROM 
       EHistory 
       LEFT JOIN EShip 
       ON EHistory.ShipCode = EShip.ShipCode 
      WHERE EHistory.EmployeeID = 123456 and IsTRProcessed = 1 
) 
SELECT * FROM YourTable WHERE RowNumber = 2; 

正しい更新クエリ

;WITH YourTable AS(
      SELECT TOP 2 
      EHistory.*, 
      ROW_NUMBER() over (order by SignonDate desc) as RowNumber 
      FROM 
       EHistory 
       LEFT JOIN EShip 
       ON EHistory.ShipCode = EShip.ShipCode 
      WHERE EHistory.EmployeeID IN (123456,234567,345678) and IsTRProcessed = 1 
) 
SELECT * FROM YourTable WHERE RowNumber = 2; 

のみまだ

を1つの結果を生成している1つの結果を生成します

複数の結果を表示できるように修正する必要があると考えるのは苦労しています。

サンプルの結果が生成する必要があります。オーバーROW_NUMBER()(...によるパーティション)とのことで

<table> 
 
<th>ID</th><th>Ship</th> 
 
<tr> 
 
    <td>123456</td><td>Ship 1</td> 
 
</tr> 
 
</table> 
 

 
<table> 
 
<th>ID</th><th>Ship</th> 
 
<tr> 
 
    <td>123456</td><td>Ship 1</td> 
 
</tr> 
 
<tr> 
 
    <td>234567</td><td>Ship 2</td> 
 
</tr> 
 
<tr> 
 
    <td>345678</td><td>Ship 3</td> 
 
</tr> 
 
</table>

+0

、サンプルデータと予想される出力を指定します。 – Mansoor

+0

@Mansoorがそれを手に入れました。サンプルデータと期待される出力を追加します – marchemike

答えて

2

使用パーティションをまた、select文からトップ2を削除する必要があります。

;WITH YourTable AS(
     SELECT 
     EHistory.*, 
     ROW_NUMBER() over (partition by EmployeeID order by SignonDate desc) as RowNumber 
     FROM 
      EHistory 
      LEFT JOIN EShip 
      ON EHistory.ShipCode = EShip.ShipCode 
     WHERE EHistory.EmployeeID IN (123456,234567,345678) and IsTRProcessed = 1 
) 
SELECT * FROM YourTable WHERE RowNumber = 2; 
関連する問題