2014-03-03 45 views
1

employeeSomethingSQL服務器:使用語法

tb_EmployeeSomething的表

EmpID| TypeID 
1 | 1 
1 | 1 
1 | 1 
1 | 2 
1 | 2 
2 | 2 
2 | 2 
2 | 2 

現在我用我的程序分頁和返回必須

EmpID| TypeID| RowNum 
1|1|1 
1|2|2 
2|2|3 

這裏是我已經試過

Declare @start int 
Declare @end int 

With Tmp2 as (
    With Tmp1 as (
     Select Distinct EmpID, TypeID 
     From tb_deductionBalance 
    ) 
    Select *, row_number() OVER (order by employeeID) as RowNum 
    From Tmp1 
) 
Select * From Tmp2 
Where RowNum Between @Start and @End 

我不確定是否有更好的方法來做到這一點。

對不起,我的英文。

謝謝!

+1

我認爲這屬於http://codereview.stackexchange.com/?還有一個類似的問題[SQL Server選擇兩個值之間的行](http://stackoverflow.com/questions/5481002/sql-server-select-rows-between-two-values) –

+0

@huMptyduMpty - 不應該僅限代碼審查用於實際工作的代碼?這段代碼被破壞了,因爲他們試圖嵌套CTE(當然,如果他們提供了**錯誤消息**,問題會更好) –

+0

@Damien_The_Unbeliever:哦,通過閱讀這個問題,我的印象是工作,他需要改進:)這就是爲什麼我建議代碼審查! –

回答

3

不要嵌套Common Table Expression S(CTE的),你逗號分隔它們:

;With Tmp1 as (
     Select Distinct EmpID, TypeID 
     From tb_deductionBalance 
), Tmp2 as (
    Select *, 
     row_number() OVER (order by empID /* no employeeID in Tmp1 */) as RowNum 
    From Tmp1 
) 
Select * From Tmp2 
Where RowNum Between @Start and @End 

任何CTE可以引用任何早期的CTE。

+1

謝謝它的作品! – user2530833