tsql - 如何确保记录始终在返回列表中并正确排序
问题描述
我正在尝试编写一个始终包含特定记录(在下面的示例中为 42)的 select 语句,而不管数据的排序方式如何。使用ORDER BY IIF( ID = 42, 0, 1 )
将允许记录始终显示在返回的数据集中,但它始终位于顶部而不是正确排序。
ID ID vs ID ID
------ ------
42 42 0 40
0 40 1 41
1 41 2 42
2 43 3 43
3 44 4 44
4 45 5 45
5 46 6 46
6 47 7 47
7 48 8 48
8 49 42 49
这是我创建的一个示例,用于说明各种现实世界的使用示例:
SET NOCOUNT ON;
DECLARE @Table TABLE ( ID int );
DECLARE @ID int = 0;
WHILE ( @ID < 100 )
BEGIN
INSERT INTO @Table ( ID )
VALUES ( @ID );
SET @ID += 1;
END
SELECT TOP(10) ID
FROM @Table
ORDER BY IIF( ID = 42, 0, 1 ), ID;
SELECT TOP(10) ID
FROM @Table
WHERE ID > 30
ORDER BY IIF( ID = 42, 0, 1 ), ID;
SELECT TOP(10) ID
FROM @Table
WHERE ID > 40
ORDER BY IIF( ID = 42, 0, 1 ), ID;
SELECT TOP(10) ID
FROM @Table
WHERE ID > 50
OR ID = 42
ORDER BY IIF( ID = 42, 0, 1 ), ID;
我需要定义SELECT
语句以至少满足上述 4 种变化。我尝试过的所有事情都开始变得相当复杂,我正在努力让它尽可能简单。
解决方案
为什么不简单地使用union
?
SELECT *
FROM
(
SELECT TOP(10) ID
FROM @Table
ORDER BY ID
UNION
SELECT ID
FROM @Table
WHERE ID = 42
) As x
ORDER BY ID
;
推荐阅读
- android - 如何用匕首动态注入数据?
- jquery - 如何将 jquery 动作传递给 ejs?
- java - FirebaseInAppMessagingClickListener 不调用 android
- javascript - 如何将对象数组传递给 Query?
- python - 将元组从函数“导出”到全局变量
- typescript - 从组件获取数据
- azure - 端点 webhook url 上的事件网格订阅的 ARM 部署失败
- hdf5 - 如何将 HDF5 数据集作为 Snakemake 输入/输出?
- ios - 我希望打印的值太长,无法打印 firebase 中的所有值
- excel - 如何从工作表中读取值并检查它们是否存在于 .txt 文件中