我正在尝试按结果集列中的值对 SQL 数据选择进行排序。数据如下:
(此数据排序不正确,仅作为示例)
ID projectID testName objectBefore objectAfter
=======================================================================================
13147 280 CDM-710 Generic TP-0000120 TOC~~@~~ -1 13148
1145 280 3.2 Quadrature/Carrier Null 25 Deg C 4940 1146
1146 280 3.2 Quadrature/Carrier Null 0 Deg C 1145 1147
1147 280 3.3 External Frequency Reference 1146 1148
1148 280 3.4 Phase Noise 50 Deg C 1147 1149
1149 280 3.4 Phase Noise 25 Deg C 1148 1150
1150 280 3.4 Phase Noise 0 Deg C 1149 1151
1151 280 3.5 Output Spurious 50 Deg C 1150 1152
1152 280 3.5 Output Spurious 25 Deg C 1151 1153
1153 280 3.5 Output Spurious 0 Deg C 1152 1154
............
18196 280 IP Regression Suite 18195 -1
数据的顺序基于 objectBefore 和 objectAfter 列。第一行始终是当 objectBefore = -1 时,最后一行将是当 objectAfter = -1 时。在上面的示例中,第二行的 ID 为 13148,因为这就是第 1 行 objectAfter 所等于的内容。有没有办法编写一个以这种方式对数据进行排序的查询?
最佳答案
这实际上是对链表进行排序:
WITH SortedList (Id, objectBefore , projectID, testName, Level)
AS
(
SELECT Id, objectBefore , projectID, testName, 0 as Level
FROM YourTable
WHERE objectBefore = -1
UNION ALL
SELECT ll.Id, ll.objectBefore , ll.projectID, ll.testName, Level+1 as Level
FROM YourTable ll
INNER JOIN SortedList as s
ON ll.objectBefore = s.Id
)
SELECT Id, objectBefore , projectID, testName
FROM SortedList
ORDER BY Level
您可以在 this post 中找到更多详细信息
关于sql - 如何根据上一行的值对sql结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20435215/