我有一张空位表,从1号到15号。这些插槽逻辑上分为3个部分,每个部分有5个插槽。我想把它们分成几个部分,中间的部分先填好,然后移到边缘,这样每个部分的第一个和最后一个部分最后填好。如果一张table看起来像这样:
原始表中的插槽(|表示段之间的边界)
| 1,2,3,4,5 | 6,7,8,9,10 | 11,12,13,14,15|
我想运行一个查询,它将返回这样的结果:每个段首先列出中间的槽,然后是中间旁边的槽,然后是每个段末尾的槽。
| 3,4,2,5,1 | 8,9,7,10,6 | 13,14,12,15,11 |
这在sql中是可能的吗?
我试过这样的方法,但效果不太好:
DECLARE @SegSize INT = 5;
DECLARE @NoSeg INT = 3;
SELECT SlotLoc
FROM Slots
ORDER BY ABS((SlotLoc%@SegSize)-CEILING(@SegSize/2 + 1))
1条答案
按热度按时间col17t5w1#
这取决于许多假设,比如固定的行数,还假设您不关心插槽2/3和4/5的顺序。根据这些数据:
这个查询非常接近您想要的输出(除了有时先列出较高的slot值,有时最后列出):
结果:
清理: