0

我有一个看起来像这样的表 EMP:

Name  DeptID  
A     1000

B     1000

C     1000

D     3000

E     6000

该表有数千条记录,具有唯一名称和 DeptID 1000,3000,6000。

我需要从表中获取 2000 行,我目前正在使用以下查询

select * from EMP where rownum<2001;

现在,我有一个要求,即需要对 DeptID=1000 的记录进行优先排序,以便查询返回 DeptID=1000 的最大可能记录。因此,如果 DeptID=1000 的记录数 >2000,则在查询响应中仅返回 DeptID=1000 记录。并且,如果 DeptID=1000 的记录数 <2000,假设为 500,则查询必须确保返回所有这 500 条记录,而其他 1500 条可以是 ID!=100 的记录

4

3 回答 3

1

免责声明:您没有指定您使用的 RDMS,所以我在 T-SQL 中为 MS SQL Server 编写了这个。

我采用了这个想法,因为如果需要您碰巧有一个更重要的特定部门 ID,我可以看到这样一种情况,在您获得该部门的所有记录后,您应该去另一个,然后是另一个,随意命令。这很好让你做到这一点:

DECLARE @DeptOrdering TABLE
(
    DeptId INT,
    SortOrder INT
)

INSERT @DeptOrdering (DeptId, SortOrder)
VALUES
    (1000, 10)
    , (6000, 20)
    , (3000, 30)

SELECT TOP 2000
    E.*
FROM EMP AS E
INNER JOIN @DeptOrdering Ordering
    ON Ordering.DeptId = E.DeptId
ORDER BY Ordering.SortOrder --, Other columns
于 2012-06-14T18:31:49.387 回答
1
Select top 2000 * 
from EMP 
Order by DeptID

如果您使用的是 mysql 而不是 tsql,那么top您将limit在最后使用而不是 。

于 2012-06-14T18:26:55.537 回答
0

根据您的描述,我认为您需要从 EMP 表中选择前 2000 条记录,首先选择 DeptID=1000 记录。

此方法创建一个结果表,该表最多可容纳 4000 条记录,前 2000 条包含 DeptID=1000 条记录(如果有 2000 条或更多)。

IF OBJECT_ID ('EMPResults', 'U') IS NOT NULL
DROP TABLE EMPResults;
GO

(SELECT TOP 2000 * INTO EMPResults FROM EMP WHERE DeptID = 1000)
UNION
(SELECT TOP 2000 * FROM EMP WHERE DeptID <> 1000);
GO

SELECT TOP 2000 *
FROM EMPResults;
GO
于 2012-06-14T19:27:27.653 回答