[SQL] TSQL - 그것은 정렬 순서를 정의 할 수 있습니까?
SQLTSQL - 그것은 정렬 순서를 정의 할 수 있습니까?
그것은 반환 된 결과의 정렬 순서를 정의 할 수 있습니까?
나는 정렬 순서는 '오렌지' '사과' '딸기'오름차순 또는 내림차순하지 싶습니다.
나는 ORDER BY는 ASC 또는 DESC을 할 수 있지만 정의 ( '오렌지', '사과', '딸기') 타입 일이 알아?
이는 SQL 서버 2000에서 실행됩니다.
해결법
-
==============================
1.그것은 매우 투박하지만 당신은 주문에 대한 CASE 문을 사용할 수 있습니다 :
그것은 매우 투박하지만 당신은 주문에 대한 CASE 문을 사용할 수 있습니다 :
SELECT * FROM Blah ORDER BY CASE MyColumn WHEN 'orange' THEN 1 WHEN 'apple' THEN 2 WHEN 'strawberry' THEN 3 END
또는, 당신은 정렬 필드와 정렬 순서를 포함하는 보조 테이블을 만들 수 있습니다.
TargetValue SortOrder orange 1 apple 2 strawberry 3
그리고이 새로운 테이블에 테이블을 가입 할 수 있습니다.
-
==============================
2.case 문을 사용합니다 :
case 문을 사용합니다 :
ORDER BY CASE your_col WHEN 'orange' THEN 1 WHEN 'apple' THEN 2 WHEN 'strawberry' THEN 3 END
else가와 대체 구문 :
ORDER BY CASE WHEN your_col = 'orange' THEN 1 WHEN your_col = 'apple' THEN 2 WHEN your_col = 'strawberry' THEN 3 ELSE 4 END
-
==============================
3.이 단명 요구 될 것입니다 경우, case 문을 사용합니다. 그러나, 당신은 잠시 동안 주위에있을 수있다 생각하고, 항상 오렌지 / 사과 / 딸기 순서가 될 것 (또는하지 않을 경우 - 아래 참조), 당신은 몇 가지 속도를 얻기 위해 일부 디스크 공간을 희생에 대해 생각 할 수 있습니다.
이 단명 요구 될 것입니다 경우, case 문을 사용합니다. 그러나, 당신은 잠시 동안 주위에있을 수있다 생각하고, 항상 오렌지 / 사과 / 딸기 순서가 될 것 (또는하지 않을 경우 - 아래 참조), 당신은 몇 가지 속도를 얻기 위해 일부 디스크 공간을 희생에 대해 생각 할 수 있습니다.
or_ap_st라는 테이블에 새 열을 만들고 과일 컬럼의 값에 따라 숫자 1, 2, 3, 그것을 채울 삽입 / 업데이트 트리거를 사용합니다. 거기에 그런 인덱스입니다.
행 변경, 즉 그것을 할 수있는 가장 좋은 시간 때 유일한 시간 때문에 그 열 의지 변화의 데이터입니다. 비용은 다음 따라서 선택 문을 상각, 쓰기의 작은 숫자보다는 읽기의 많은 수에 발생됩니다.
귀하의 질문은 눈부시게 빠른 될 것입니다 :
select field1, field2 from table1 order by or_ap_st;
성능을 죽이는없이 당 행 기능.
당신은뿐만 아니라 다른 정렬 순서를 원한다면, 음,의는 왜 열 or_ap_st을했다. 당신이 필요로하는 당신은 많은 다른 정렬 컬럼으로 추가 할 수 있습니다.
-
==============================
4.내가 그 경우에 할 것은
내가 그 경우에 할 것은
ORDER BY CASE WHEN FRUIT = 'Orange' THEN 'A' WHEN FRUIT = 'Apple' THEN 'B' WHEN FRUIT = 'Strawberry' THEN 'C' ELSE FRUIT END
-
==============================
5.turtlepick의 대답에서 더 나아가 :
turtlepick의 대답에서 더 나아가 :
ORDER BY CASE WHEN FRUIT = 'Orange' THEN 'A' WHEN FRUIT = 'Apple' THEN 'B' WHEN FRUIT = 'Strawberry' THEN 'C' ELSE FRUIT END
경우 당신은 과일 몇 가지 더 많은 항목을 가지고 그런 다음 키워드, 해당 항목은 하드 코딩 된 순서 내에서 나타납니다 후 정의 문자로 시작하는 일. 예를 들어 바나나 딸기 전에 보여줍니다. 당신은 그것을 피할 수 있습니다
ORDER BY CASE WHEN FRUIT = 'Orange' THEN '.1' WHEN FRUIT = 'Apple' THEN '.2' WHEN FRUIT = 'Strawberry' THEN '.3' ELSE FRUIT END
여기에 나는 그들이 과일의 값의 시작 부분에 나타나지 않을 것이라는 희망 낮은 ASCII 값으로 사용되는 문자가 있습니다.
-
==============================
6.테이블에 키를 추가합니다 (예를 들어, fruit_id INT 신원 (1,1) 기본 키) 삽입의 순서를 유지하기
테이블에 키를 추가합니다 (예를 들어, fruit_id INT 신원 (1,1) 기본 키) 삽입의 순서를 유지하기
create table fruit(fruit_id int identity(1,1) primary key, name varchar(50)) go insert into fruit(name) values ('orange') insert into fruit(name) values ('apple') insert into fruit(name) values ('strawberry') select name from fruit
결과:
orange apple strawberry
from https://stackoverflow.com/questions/4789241/tsql-is-it-possible-to-define-the-sort-order by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 서버 나 클라이언트에 정렬? (0) | 2020.06.25 |
---|---|
[SQL] 더 : FOR 커서 루프 또는 간단한 선택 오라클 데이터베이스에 대량 삽입? (0) | 2020.06.25 |
[SQL] SQL 서버 2008 R2에 대한 Try_Convert (0) | 2020.06.25 |
[SQL] OLE DB 공급자 연결된 서버 "Microsoft.ACE.OLEDB.12.0" "(널)" (0) | 2020.06.25 |
[SQL] 그것은 SQL 쿼리의 텍스트 파일을 실행할 수 있습니까? (0) | 2020.06.25 |