Sql server 如何在ROW_NUMBER()函数和Union中获取筛选记录?
我有一个从表中获取结果的联合查询。 当只执行第一个查询时,该工作正常,但如果在第二个查询(联合部分)中也返回该时间的结果,则它将不工作。 我的问题是Sql server 如何在ROW_NUMBER()函数和Union中获取筛选记录?,sql-server,sql-server-2008,sql-server-2008-r2,sql-server-2012,Sql Server,Sql Server 2008,Sql Server 2008 R2,Sql Server 2012,我有一个从表中获取结果的联合查询。 当只执行第一个查询时,该工作正常,但如果在第二个查询(联合部分)中也返回该时间的结果,则它将不工作。 我的问题是 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
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
请帮我做这个。我想使用行号添加分页。是否有其他解决方案?这可能对您有所帮助-
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
在执行
行编号()ing
之前,您需要围绕联合进行另一个子查询:
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