0

そのため、最初に問題全体を説明し、次に SQL コーディングのどこに問題があるかを説明します。

倉庫のピックリストである一連のデータがあります。基本的に、このデータを再編成して、各通路で一方向に従うようにしています。

たとえば、ここにピックリストがあります

三重停車場等 AISLE ビン

216 1PV 71

216 午後 2 時 64

216 3 PL 47

216 午後 4 時 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 ピ 22

216 12PI45

216 13 PN 33

216 14 PN 28

通路は一方通行なので、上り坂と下り坂があります。

この場合、通路の PJ が昇順 (ピック 7、8、9、10) になるようにこのテーブルを再編成したいので、ピックリストを調べて、通路の昇順または降順に基づいてピック シーケンスを並べ替えます。この例では 1 つの通路にのみ焦点を当てます。そのため、テーブルをループして、列 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 でこれに対して完全に間違ったアプローチをとっていた可能性があるので、より良い方法があれば教えてください。

4

1 に答える 1