需要SQL中复杂排序的帮助吗

需要SQL中复杂排序的帮助吗,sql,sql-server,tsql,sorting,Sql,Sql Server,Tsql,Sorting,我的SQL语句有一个复杂的排序问题。我有一个包含以下列的表 No Time Value -- ---- ----- 1 0900 '' 2 1030 '' 3 1020 '' 4 1010 '' 5 1100 '' 1 1015 'P' 2 1045 'P' 我想通过执行以下步骤对该表进行排序 从值为空字符串的表中选择行,并按编号排序 从值为“p”的同一表中选择行,然后按时间排序 从2中

我的SQL语句有一个复杂的排序问题。我有一个包含以下列的表

No   Time    Value  
--   ----    -----
 1   0900    ''
 2   1030    ''
 3   1020    ''
 4   1010    ''
 5   1100    ''
 1   1015    'P'
 2   1045    'P'
我想通过执行以下步骤对该表进行排序

从值为空字符串的表中选择行,并按编号排序

从值为“p”的同一表中选择行,然后按时间排序

从2中选择每一行并按时间插入1

结果应该是这样的

No   Time    Value  
--   ----    -----
 1   0900    ''
 1   1015    'P'
 2   1030    ''
 3   1020    ''
 4   1010    ''
 2   1045    'P'
 5   1100    ''

如何在SQL中执行此操作?

编辑:谢谢您的评论

再读一遍,我认为你问题的第三部分没有意义。步骤1的结果不是按时间排序的,您不能按时间插入


例如,在示例结果中,第二行是has time 1015,即介于0900和1030之间。但它也可能在后面的1020和1010行之间?

看起来你可以用一个更简单的需求来表达你的需求。 您总是按时间排序,也可能按值排序,然后按编号排序

    sort by time, value, no
这将按时间对一切进行排序。对于两个相同的时间,将应用值排序等


您可以根据一个唯一的编号进行排序,该编号用于组合您的标准。但这将更加复杂。

不幸的是,我认为用标准SQL查询无法做到这一点,原因是您的算法不面向集合。您的示例数据集说明了这一点—第一个“P”记录显示在0900和1030条记录之间,但根据您的条件将其放在1010和1045条记录之间也同样合适。如果将其放在显示的位置是正确的,则需要修改条件,使其类似于将2中的每一行放在1中包含它的前两行之间,其中第一行由排序条件1定义


结果是,这种类型的设置可能会迫使您使用基于光标的解决方案。如果您可以确定一个要排序的复合值,那么您可能可以避免这种情况,但根据上面的内容,我看不出这可能是什么。

根据他的结果,第三、第四和第五行的顺序是否不正确?它们按否排序。按值排序。这会将第3行放在第2行之前