在我上一篇文章(下面的鏈接)中,我試過使用ROW_NUMBER ORDER BY
並最終得到了所需的解決方案。請參閱以下鏈接:而不是ROW_NUMBER ORDER
Get Wages Yearly Increment Column Wise Using Sql
現在我嘗試使用下面的查詢SQL Server 2000中,只是爲了演示的目的。我知道,ROW_NUMBER ORDER BY
不能用於它。而一些谷歌上搜索後,試圖使用SQL Server 2000中的以下內容:(1查詢)
SELECT k.ID, k.[Name], m.Amt,
(SELECT COUNT(*) FROM EmpIncrement l WHERE l.EmpID <= m.EmpID) as RowNum
FROM EmpIncrement m
JOIN Employee k ON m.EmpID = k.ID
而且我得到了這樣的輸出:
ID Name Amt RowNum
1 John 2000 2
2 Jack 8000 4
1 John 1000 2
2 Jack 4000 4
同樣,當我用ROW_NUMBER ORDER BY
以下,那麼它示出了不同的輸出:(第二查詢)
SELECT k.ID, k.Name, m.Amt,
ROW_NUMBER() OVER (PARTITION BY EmpID ORDER BY DATEPART(yy,IncrementDate)) as RowNum
FROM EmpIncrement m
JOIN Employee k ON k.ID = m.EmpID
輸出:
ID Name Amt RowNum
1 John 1000 1
2 John 2000 2
1 Jack 4000 1
2 Jack 8000 2
因此,注意到在第二個查詢的輸出正確的兩個查詢中,員工ID(RowNum)的分組都不相同。我想知道兩個查詢輸出的差異以及第一個查詢是否等於ROW_NUMBER ORDER BY
。謝謝。
注:我沒有在這裏再次包含表結構和示例數據。沒關係 - 你可以看到之前的文章。
我想,用'Generic'這個詞,你問的是表中唯一的id,如果是的話,它是包含的。謝謝你的回答@SqlZim。 –
@ AT-2017我應該使用'surrogate'這個詞,我會糾正這個問題。 – SqlZim
它的工作,我只是稍微改變這一節'哪裏l.Empid = m.Empid和l.Amt <= m.Amt'到這個'where l.Empid = m.Empid和l.IncrementID> = m.IncrementID' (在第一個查詢中),因爲我在** EmpIncrement **表中擁有唯一的ID。非常感謝@SqlZim。 –