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

3

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

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

我希望通过以下步骤对此表进行排序。

  1. 从值为''(空字符串)的行中选择,并按No进行排序。

  2. 从相同的表中选择值为'P'的行,然后按时间排序。

  3. 从2)中选择每一行,并按时间插入到1)中。

结果应该类似于这样。

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

我该如何在SQL中实现这个功能?

3个回答

2

编辑:感谢评论。

重新阅读后,我认为你的问题第三部分没有意义。步骤1)的结果未按时间排序,您无法按时间插入它。

例如,在您的示例结果中,第二行具有时间1015,介于0900和1030之间。但它也可能在稍后的1020和1010行之间?


这样做不会导致第三、第四和第五个元素按照他的结果排序错误吗(它们按值为''进行排序)? - dove
这将使第三行排在第二行之前。 - Rashmi Pandit

0

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

    sort by time, value, no

这将按时间对所有内容进行排序。对于两个相同的时间,将应用值的排序等。


你可以按照一个唯一的数字进行排序,这个数字是由你组合你的条件而建立的。但这会更加复杂。


0

很遗憾,我认为您无法使用标准SQL查询来完成此操作,原因是您的算法不是面向集合的。您的样本数据集说明了这一点 - 您有第一个“P”记录出现在0900和1030记录之间,但根据您的条件,将其放置在1010和1045记录之间同样合适。如果将其放置在您显示的位置上是正确的,则需要修改条件,例如“将#2中的每一行放置在#1中的前两行之间,这些行在时间上框定它”,其中“第一”由#1的排序条件定义。

结果是,这种类型的设置可能会迫使您采用基于游标的解决方案。如果您可以确定一个组合值进行排序,则可以避免这种情况,但基于您上面提供的内容,我不知道那可能是什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接