programing

SQL: 행 순서 위치를 변경하는 방법

copyandpastes 2022. 10. 2. 22:39
반응형

SQL: 행 순서 위치를 변경하는 방법

예를 들어 다음과 같은 표가 있다고 합시다.

ID     Name    position
11     Kate        1
12     Frank       2
13     Anna        3
14     Peter       4
15     James       5
16     Michael     6

현재 아이디와 타겟 위치를 알려주면 효율적인 재주문 방법을 생각해내야 합니다.

SQL과 서버 측 언어를 조금 혼용하려고 했습니다. (Frank의 업그레이드):

if (newPosition > oldPosition) {
    UPDATE people SET position = position - 1 WHERE listId = 1 AND position <= @newPosition AND Name != "Frank";
    UPDATE people SET position = @newPos WHERE listId = 1 AND Name="Frank";
} else {
    …
}

이 문제의 하나는 현재 위치가 0이면 음이 된다는 것입니다.

열을 다시 정렬하는 방법에 대한 아이디어 있나요?

편집: 예를 들어, Frank(위치 = 2)를 Peter(위치 = 4)와 James(위치 = 6) 사이로 이동한다고 가정해 보겠습니다. 따라서 이상적인 테이블은 다음과 같습니다.

ID     Name    position
11     Kate        1
13     Anna        2
14     Peter       3
12     Frank       4
15     James       5
16     Michael     6

저는 당신이 어떻게 재정렬 작업을 수행하고자 하는지 잘 모르겠습니다.이게 당신이 생각하고 있던 건가요?

update T
set position =
    case    
        when newPosition > oldPosition then
            case when position = least(oldPosition, newPosition)
                then newPosition else position - 1 end
        else /* newPosition < oldPosition */
            case when position = greatest(oldPosition, newPosition)
                then newPosition else position + 1 end
    end    
where position between
           least(oldPosition, newPosition)
    and greatest(oldPosition, newPosition)
    and oldPosition <> newPosition

언급URL : https://stackoverflow.com/questions/40613896/sql-how-to-change-a-row-order-position

반응형