SQL은 특정 레코드가 맨 위에 하나 있고, 다른 레코드는 아래에 모두 있습니다.
특정 레코드 하나(레코드의 프라이머리 ID에 의해 발견됨)를 상단에 표시하고, 그 아래에 날짜별로 정렬된 다른 모든 레코드를 표시하는 쿼리를 조합하려고 합니다(프라이머리 ID 외에 테이블의 필드 중 하나로 "date_added"가 있습니다).
UNION으로 이 작업을 수행할 수 있습니다(첫 번째 선택은 원하는 레코드를 찾고 다른 선택은 다른 모든 레코드를 표시함). 하지만 더 나은 방법이 없을까요?
그건 그렇고, 오라클을 사용하고 있습니다.
두 필드로 정렬하여 이 작업을 수행할 수 있습니다.
첫 번째는 행이 원하는 행이면 0을 반환하고 그렇지 않으면 1을 반환하는 식입니다.정렬은 오름차순으로 진행되므로 선호하는 레코드를 먼저 얻습니다.
두 번째 정렬 필드는 date_added이므로 나머지 레코드는 이 순서로 정렬됩니다.
sql server에 있는 오라클을 모를까봐 걱정됩니다.
select *
from the_table
order by (case id when 999 then 0 else 1 end), date_added desc
더 쉬운 방법은 화려한 주문을 시공하는 것입니다.pk = 123의 예는 다음과 같습니다.
select *
from YourTable
order by case when yourpk = 123 then 1 else 2 end, date_added
오라클을 정확히 알지는 못하지만, 당신은 아마...
ORDER BY IF(id == THE_ID, 0, 1), date_added
두 개 이상의 레코드를 같은 기술을 사용하여 맨 위로 정렬할 수 있습니다.
999 처음에 998초, 그 다음에 날짜별로 정렬된 다른 모든 것들
*를 선택
from the_table
order by (case id when 999 then 0 when 998 then 1 else 2 end), date_added desc
SELECT *
FROM `Table`
ORDER BY (`id` = THE_ID) DESC, `date_added` DESC
간단한 방법은 두 개의 개별 항목을 표시하고, 따라서 간단한 쿼리를 구분하기 위해 쓰기를 원한다는 것을 인식하는 것입니다.첫 번째 레코드를 검색하는 쿼리와 정렬된 목록을 검색하는 쿼리가 있습니다.하나의 고유한 기록 때문에 이 이상의 작업을 수행하는 데 실질적인 성능상의 이점은 없습니다.
언급URL : https://stackoverflow.com/questions/1699955/sql-to-have-one-specific-record-at-the-top-all-others-below
'programing' 카테고리의 다른 글
batis 컬렉션 열의 매개 변수에 문자열만 전달하려면 어떻게 해야 합니까? (0) | 2023.09.13 |
---|---|
SQL 2008에서 테이블을 삭제하지 않고 열을 변경하는 방법 (0) | 2023.09.13 |
node.js와 io.js의 차이점은 무엇입니까? (0) | 2023.09.13 |
"compilerVersion" IIS 오류를 수정하려면 어떻게 해야 합니까? (0) | 2023.09.13 |
Docker mysql ERROR 1396 (HY000):'root'@'%'에 대한 CREATE USER 작업 실패 (0) | 2023.09.13 |