【问题标题】:SQL Server : With SyntaxSQL Server:使用语法
【发布时间】:2014-03-03 09:44:27
【问题描述】:

我有一张employeeSomething的表格

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

我不确定是否有更好的方法来做到这一点。

对不起我的英语。

谢谢!

【问题讨论】:

  • 我认为这属于codereview.stackexchange.com ?还有一个类似的问题SQL Server select rows between two values
  • @huMptyduMpty - 代码审查不应该只用于实际有效的代码吗?此代码已损坏,因为他们试图嵌套 CTE(诚然,如果他们提供 错误消息,问题会更好)
  • @Damien_The_Unbeliever:哦,通过阅读这个问题,我的印象是它正在工作,他需要改进:) 这就是我建议代码审查的原因!
  • 实际上我上面的代码不起作用。抱歉,我没有发布错误消息。

标签: sql-server paging


【解决方案1】:

你不嵌套Common Table Expressions (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。

【讨论】:

    【解决方案2】:

    使用 ROW_NUMBER() 函数来完成。 您可以在此处找到有关 ROW_NUMBER 的信息: http://technet.microsoft.com/en-us/library/ms189798.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 2010-10-29
      相关资源
      最近更新 更多