【发布时间】:2017-12-13 05:56:28
【问题描述】:
以下场景,我需要同一张表中具有特定条件的前 3 条记录,并且需要与不包括第一个查询结果的第二个查询记录合并。
表 A:
Id Name Flag
-------------
1 A 1
2 B 0
3 C 0
4 D 1
5 E 0
6 F 1
7 G 0
8 H 0
前 3 名,其中标志 = 1,最新记录页面索引为 1,行数为 5
Id Name Flag
----------------
6 F 1
4 D 1 first require flag =1 first 3 records
1 A 1
---------------------------------------
8 H 0
7 G 0
最新记录的页面索引 2 和行数 5
Id Name Flag
--------------
6 F 1
5 E 0
3 C 0
2 B 0
如何通过 SQL 查询实现这一点?
IF (@PageNumber = 0)
BEGIN
SELECT TOP (@RowsPerPage) [Id], [Name], [Flag]
FROM
(SELECT [Id], [Name], [Flag]
FROM
(SELECT TOP 3 [Id], [Name], [Flag]
FROM [A]
WHERE Flag = 1
ORDER BY Id DESC
UNION
SELECT [Id], [Name], [Flag]
FROM [A]
ORDER BY Id DESC) T
END
ELSE
BEGIN
// Normal paging query excluding top 3 flag records.
END
【问题讨论】:
-
我看到 id 6 出现在两个结果集中
-
是的,是错字,不会出现
-
请在下方查看我的答案
标签: sql sql-server sql-server-2008 sql-server-2016