2014-09-05 51 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