使用行号从 sql 查询生成列表
Using Row number to generate list from sql query
我正在尝试生成一个获取特定 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;
Generates 1 result which is correct
更新查询
;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;
Only Generates 1 result still
我很难思考应该修改什么以允许它显示多个结果。
示例结果应生成:
<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>
使用 partition by with Row_number() over(partition by ...)。您可能还需要从 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;
我正在尝试生成一个获取特定 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;
Generates 1 result which is correct
更新查询
;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;
Only Generates 1 result still
我很难思考应该修改什么以允许它显示多个结果。
示例结果应生成:
<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>
使用 partition by with Row_number() over(partition by ...)。您可能还需要从 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;