我有一个临时表,其中有一列:
OfficeID
-----
0
1
1
1
60
60
61
61
61
61
317
317 <----
63 <----
63
63
63
63
当我Distinct
用来删除重复值时,SQL对结果进行排序,如下所示,但我不希望对它进行排序。
OfficeID
--------
0
1
60
61
63 <---
317 <---
我想要没有重复值且没有排序的结果
OfficeID
----------
0
1
60
61
317 <---
63 <---
如果您不能更改实际表的结构,那么我只能想到一种实现此目的的方法,那就是使用临时表或表变量。在下面的测试设置中,我选择了后者。
首先,您需要一个IDENTITY
列来“存储”事物的顺序:
DECLARE @TempTable TABLE
(
TempID INT IDENTITY(1, 1)
, OfficeID INT
);
然后,使用事物的原样顺序填充(不带ORDER BY
):
INSERT INTO @TempTable (OfficeID)
SELECT OfficeID
FROM OfficeIDs;
现在,如果有的话,我们可以使用引入一些魔术ROW_NUMBER()
,在这种情况下,该魔术仅用于选择每个OfficeID系列的第一项:
SELECT
OfficeID
FROM (SELECT
*
, ROW_NUMBER() OVER (PARTITION BY OfficeID ORDER BY TempID) SortOrder
FROM @TempTable) AS t
WHERE t.SortOrder = 1
ORDER BY TempID;
请注意,我需ORDER BY @TempTable.TempID
要这样做以保持原始排序。
我的测试结果:
OfficeID
-----------
0
1
60
61
317
63
(6 rows affected)
Completion time: 2020-01-01T13:44:14.9947886+01:00
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句