[英]Sql Query - Generating "lot" numbers on a list for each group of N items with the same ID
我遇到過需要編寫查詢的情況,但我不知道最佳路線是什么。
所以假設我有這樣的數據:
+------------+-------------------+
| EmployeeID | ProjectStartDate |
+------------+-------------------+
| 1 | 01/01/2017 |
| 1 | 02/02/2017 |
| 1 | 03/03/2017 |
| 1 | 04/04/2017 |
| 1 | 05/05/2017 |
| 1 | 06/06/2017 |
| 1 | 07/07/2017 |
| 2 | 01/01/2017 |
| 2 | 02/02/2017 |
| 2 | 03/03/2017 |
| 2 | 04/04/2017 |
+------------+-------------------+
我需要為每個員工生成項目“批次”,但批次有一個與每組 N(這里假設為 5 個)項目相關聯的批號。 所以我需要一個查詢,可以按 EmployeeID 分組,按 ProjectStartDate 排序,然后將每個員工的結果動態分組為 5 組,為每個組分配一個增量計數。 所以最終的結果是這樣的:
+------------+-------------+------------------+
| LotNumber | EmployeeId | ProjectStartDate |
+------------+-------------+------------------+
| 1 | 1 | 01/01/2017 |
| 1 | 1 | 02/02/2017 |
| 1 | 1 | 03/03/2017 |
| 1 | 1 | 04/04/2017 |
| 1 | 1 | 05/05/2017 |
+------------+-------------+------------------+
| 2 | 1 | 06/06/2017 |
| 2 | 1 | 07/07/2017 |
+------------+-------------+------------------+
| 1 | 2 | 01/01/2017 |
| 1 | 2 | 02/02/2017 |
| 1 | 2 | 03/03/2017 |
| 1 | 2 | 04/04/2017 |
+------------+-------------+------------------+
通常,我只是為批次創建一個表,但批次號可以動態更改,因為它們從最舊的日期生成的第一批從日期開始。 因此,添加或刪除項目將更改其后的每個批號。
有沒有人對一種有效的方法有任何想法?
ROW_NUMBER
和整數除法的組合應該可以工作:
WITH CTE AS
(
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY EmployeeID ORDER BT ProjectStartDate)
FROM dbo.YourTable
)
SELECT (RN -1 )/5 + 1 LotNumber,
EmployeeID,
ProjectStartDate
FROM CTE
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.