Tsql 如何确保记录始终在返回列表中并正确排序
我试图编写一个select语句,它将始终包含一条特定的记录(在下面的示例中为42条),而不管数据是如何排序的。使用按IIF排序(ID=42,0,1)将允许记录始终显示在返回的数据集中,但它总是位于顶部,而不是正确排序Tsql 如何确保记录始终在返回列表中并正确排序,tsql,sql-server-2016,Tsql,Sql Server 2016,我试图编写一个select语句,它将始终包含一条特定的记录(在下面的示例中为42条),而不管数据是如何排序的。使用按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
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;
设置不计数;
声明@Table表(ID int);
声明@ID int=0;
而(@ID<100)
开始
插入@Table(ID)
数值(@ID);
设置@ID+=1;
结束
选择顶部(10)ID
来自@Table
按IIF排序(ID=42,0,1),ID;
选择顶部(10)ID
来自@Table
其中ID>30
按IIF排序(ID=42,0,1),ID;
选择顶部(10)ID
来自@Table
其中ID>40
按IIF排序(ID=42,0,1),ID;
选择顶部(10)ID
来自@Table
其中ID>50
或ID=42
按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
;
可悲的是,这正是我想出来的,我只是觉得这太过分了。我真的希望我错过了更简单的事情。