仅在条件下使用偏移量获取

时间:2019-01-23 07:51:01

标签: sql tsql

根据条件使用下一个偏移量的最佳方法是什么。

有这样的想法,但编译错误。

        declare @Condition bit

        select
        canvas.CanvasName,
        c.CompanyID,
        c.CompanyName
        from JobCanvas_B2B canvas
        inner join JobActivity act on act.CanvasId = canvas.CanvasId
        inner join [Person_5.4] p on p.JobCanvasId = canvas.CanvasId
        inner join Person pers on pers.PersonId = p.PersonId
        inner join Company c on c.CompanyID = pers.CompanyId
        where act.NextDateD  between @StartDate and @EndDate

         order by  act.InteractionDateD  desc

         if(@Condition = 1)
         begin
            offset @SkipRows rows 
            fetch next @PageSize rows only
         end            

1 个答案:

答案 0 :(得分:1)

假设您可以为返回的行数选择一个合理的默认上限,只需使用一些CASE表达式:

    declare @Condition bit

    select
    canvas.CanvasName,
    c.CompanyID,
    c.CompanyName
    from JobCanvas_B2B canvas
    inner join JobActivity act on act.CanvasId = canvas.CanvasId
    inner join [Person_5.4] p on p.JobCanvasId = canvas.CanvasId
    inner join Person pers on pers.PersonId = p.PersonId
    inner join Company c on c.CompanyID = pers.CompanyId
    where act.NextDateD  between @StartDate and @EndDate
    order by  act.InteractionDateD  desc

    offset CASE WHEN @Condition = 1 THEN @SkipRows ELSE 0 END rows 
    fetch next CASE WHEN @Condition = 1 THEN @PageSize ELSE 1000000 END rows only

您不能在定义查询的过程中“停下来”,而是开始编写控制流语句(例如IF)来决定应如何构造查询的一部分。