使用行号从sql查询生成列表

时间:2017-04-25 07:27:35

标签: sql sql-server row-number

我试图生成一个获取某个id的第二行的脚本。 我的第一个查询正确执行。然而,当我尝试列出ID列表时,我只得到1个结果。

应该使用我的更新查询调整什么才能显示多个结果?

原始查询

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

生成1个正确的结果

更新了查询

;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个结果

我很难思考应该修改什么以允许它显示多个结果。

样本结果应该生成:



<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>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

使用row by row_number()over(partition by ...)。您可能还需要从select语句中删除Top 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;