2017-10-17 3 views
0

저는 Device라고 불리는 테이블을 가지고 있습니다. 이제 devid 5와 devid 6에 대한 devid 행의 순서를 교환해야합니다.SQL의 행 순서를 교환하고 업데이트하는 방법은 무엇입니까?

CurrentTable

PID DEVID INID EVTYPEID EVID ALID PARMID TEXTID InputName Input2Name 
1 1  0  30  0 100102  0 14  998-TCR1  998-EMG1 
1 2  0  30  0 100103  0 15  998-FR  998-TCR2 
9 3  0  30  0 100113  0 25  998-TCR2  998-EMG2 
0 4  2  30  0 100114  0 26  998-FR  NULL 
8 5  18  4  53 100114  0 0  998-Sg op 998-Sg cl 
4 6  17  4  53 1000114  0 0  SG_PB  RA_PB 

예상 결과

PID DEVID INID EVTYPEID EVID ALID PARMID TEXTID InputName Input2Name 
1 1  0  30  0 100102  0 14  998-TCR1  998-EMG1 
1 2  0  30  0 100103  0 15  998-FR  998-TCR2 
9 3  0  30  0 100113  0 25  998-TCR2  998-EMG2 
0 4  2  30  0 100114  0 26  998-FR  NULL 
4 6  17  4  53 1000114  0 0  SG_PB  RA_PB 
8 5  18  4  53 100114  0 0  998-Sg op 998-Sg cl 

내 테이블과 PID 및 RID있는 기본 키

+0

왜 ORDER BY를 사용하지 않습니까? 또는 프리젠 테이션 레이어를 정렬 할 수 있습니까? 테이블 ID를 주문 시스템으로 사용하는 것은 좋지 않습니다. 또는 DEVID는 주문에 엄격하게 사용되는 열입니까? –

+0

그냥 5와 6을 스왑하거나, 많은 라인에서 이것이 진행중인 것입니까? – Twelfth

+0

devid 열에 여기에 다른 테이블이 있습니다. 그래서 나는 같은 순서로 이것을 만들고 싶다 – coffemug

답변

0

하여 C에서 150 열이 할 추가 선택 진술 플러스 :

Order by case when DEVID = 6 then 5 
when DEVID = 6 then 6 
else Devid 
end 

예쁜 해결책은 아니지만 질문에 답합니다.

+0

또한 콜럼을 업데이트하려고합니다. – coffemug

+0

? rowID를 기반으로 업데이트하고 일부 순서는 업데이트하지 않습니다. 순서대로 열을 업데이트해야한다는 것은 무엇을 의미합니까? 어리석은 느낌, 고든 리노프에게 이것은 업데이트되지 않은 주문 질문이라고 말했다. – Twelfth

+0

제목을 업데이트했습니다. 내가 정말로 원하는 것은 행을 교환하여 테이블을 업데이트하는 것입니다. 어쩌면 복잡하거나 너무 어리석은 짓 일 수도 있습니다. 나와 맺으십시오. – coffemug

0

주위를 전환하려면 임시 번호를 사용해야합니다.

UPDATE Device SET DEVID=-6 WHERE DEVID=6; 
UPDATE Device SET DEVID=6 WHERE DEVID=5; 
UPDATE Device SET DEVID=5 WHERE DEVID=-6; 

다른 테이블이 DEVID 열과 외래 키 관계를 갖는 경우 조금 복잡합니다. 옵션 :

  • 외부 키 관계를 깨고 스위치를 만든 다음 키를 다시 넣을 수 있습니다.
  • DEVID = 7 (또는 다른 것을 사용하지 않음)으로 임시 레코드를 생성하고 위의 쿼리 (-6 대신)에서 7을 자리 표시 자로 사용할 수 있습니다. 완료되었을 때 더미 레코드를 삭제하는 것을 잊지 마십시오.
관련 문제