Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 如何确保记录始终在返回列表中并正确排序_Tsql_Sql Server 2016 - Fatal编程技术网

Tsql 如何确保记录始终在返回列表中并正确排序

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

我试图编写一个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      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
;

可悲的是,这正是我想出来的,我只是觉得这太过分了。我真的希望我错过了更简单的事情。