2014-09-05 29 views
0

所以我会先解释整个问题,然后解释SQL编码中问题出在哪里。根据通道方向重新组织一个选择列表

我有一组数据是通过一个仓库的选择列表,我基本上试图重新组织这些数据以遵循每个通道中的一个方向。

所以例如,这里是一个选择列表

TRIPID stopseq AISLE仓

216 1 PV 71

216 14:00 64

216 3 PL 47

216 4 PM 36

216 5 PL 32

216 6 PL 88

216 7 PJ 49

216 8 PJ 29

216 9 PJ 20

216 10 PJ 19

216 11 PI 22

216 12 PI 45

216 13 PN 33

216 14 PN 28

,因为过道只能走一条路,有的上升,有的在这种情况下,降

,我希望重新组织该使得走廊PJ上升(选取7,8,9,10) ,所以我希望它通过选项列表并根据走道的升序或降序对picksequence进行重新排序。我只关注这个例子中的一个通道,所以即时查找将循环遍历表的查询,并重新组织PJ列的记录,以便以相反的顺序进行。类似于

216 7 PJ 19

216 8 PJ 20

216 9 PJ 29

216 10 PJ 49

但我只试图影响这些行现在。 到目前为止,我已经创建了一个游标,其中包含一个CTE。像这样的东西。

declare inner_cursor cursor scroll 
for select aisle from table_input 

open inner_cursor 

fetch next from inner_cursor into @aisle 
while @@fetch_status = 0 
begin 
    if @aisle in ('PJ') 
    begin 
     with C as 
      (select stopseq, 0 + row_number() over (order by bin desc) as newtripstop 
      from SIM_Input_reschedule 
      ) 
      update C 
      set tripstopseq = newtripstop 
     end 

但只会为了通过段数的整个列表,所以我试图通过添加

begin 
      with C as 
      (select tripstopseq, 0 + row_number() over (order by bin asc) as newtripstop, aisle 
      from SIM_Input_reschedule 
      where AISLE = @aisle 
      ) 
      update C 
      set tripstopseq = newtripstop 
     end 

增加对过道 约束但受影响的表中没有行。任何帮助表示赞赏。我可能一直在与CTE采取完全错误的做法,所以只是说如果你想到一个更好的方法来做到这一点。

+0

CTE选择是否为您提供newtripstop字段中的所需值? – Bulat 2014-09-05 17:04:13

回答

0

我认为你能做的就是这样。

加场sort_order这只会有两个值:

  • 1 - 对于应以升序进行排序过道
  • (-1) - 与降序排序过道

然后,您可以使用以下查询得到正确的排序顺序:

SELECT aisle, bin, 
    (SELECT MAX(sequence) FROM myTable 
    WHERE t.aisle != aisle and sequence < t.sequence) 
    + ROW_NUMBER() OVER(PARTITION BY aisle ORDER BY sort_order * bin) as newsequence 
FROM myTable t 

要做到这一点没有新的领域,你将不得不使用CASE WHEN和相同的逻辑。

+0

事情是,我不想按过道命令。我想保持订单的其余部分完全相同。我想要替换表中的实际stopseq字段。我仍然希望它在stopseq中跳到1-10,只是用PJ重新排序行。这确实组织它如何我想这行最终结果,但不是我正在寻找。 – 2014-09-05 16:59:54

+0

我已经更新了答案。 – Bulat 2014-09-05 17:21:47

+0

这似乎很奇妙,谢谢。 – 2014-09-05 17:34:19

相关问题