【问题标题】:How to Get Filter record in ROW_NUMBER() function and Union?如何在 ROW_NUMBER() 函数和联合中获取过滤器记录?
【发布时间】:2014-01-02 13:42:10
【问题描述】:

我有一个联合查询用于从表中获取结果。 当仅第一个查询执行该时间时,此工作正常,但如果在第二个(联合部分)中也返回结果,则该时间将不起作用。 我的查询像

Select * from (
Select  ROW_NUMBER() OVER(ORDER BY EmpID DESC) as RowNo,
    Emp.EMPID, EMP.FirstName
    From Emp
Union
Select ROW_NUMBER() OVER(ORDER BY EMPID DESC) as RowNo,
    Emp.EMPID, EMP.FirstName
    From Emp Inner Join EMPDetail On Emp.EmpID = EMPDetail.EMPID 
    Where EMPDetail.IsActive=True
    ) as _EmpTable where RowNo between 1 and 20

请帮助我。我想使用行号添加分页。有没有其他解决方案?

【问题讨论】:

    标签: sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012


    【解决方案1】:

    在执行row_number()ing 之前,您需要围绕union 进行另一个子查询:

    Select * 
    from 
    (
        Select  ROW_NUMBER() OVER(ORDER BY EmpID DESC) as RowNo,
            EmpID, 
            FirstName
        FROM
        (
            SELECT 
                Emp.EMPID, 
                Emp.FirstName
            From Emp
    
            Union
    
            Select 
                Emp.EMPID, 
                EMP.FirstName
            From 
                Emp Inner Join EMPDetail On Emp.EmpID = EMPDetail.EMPID 
            Where 
                EMPDetail.IsActive=True
        )
    ) as _EmpTable 
    where 
        RowNo between 1 and 20
    

    【讨论】:

      【解决方案2】:

      这可能对你有帮助 -

      SELECT * 
      FROM (
          SELECT *, ROW_NUMBER() OVER (ORDER BY e.EmpID DESC) AS RowNo
          FROM (
              SELECT /*TOP 20*/
                  e.EmpID,
                  e.FirstName
              FROM dbo.Emp e
              ORDER BY e.EmpID DESC
      
              UNION
      
              SELECT /*TOP 20*/
                  e.EMPID,
                  e.FirstName
              FROM dbo.Emp e
              WHERE EXISTS(
                  SELECT 1 
                  FROM dbo.EMPDetail ed
                  WHERE e.EmpID = ed.EmpID
                      AND ed.IsActive = 'TRUE'
              ) 
              ORDER BY e.EmpID DESC
          ) t
      ) t
      WHERE t.RowNo BETWEEN 1 AND 20
      

      【讨论】:

        猜你喜欢
        • 2020-10-07
        • 1970-01-01
        • 2011-07-09
        • 1970-01-01
        • 1970-01-01
        • 2015-09-17
        • 2011-04-22
        • 1970-01-01
        • 2019-08-19
        相关资源
        最近更新 更多