주문 기준 조항에 대한 명세서를 작성한 경우
SQL Server 2008 R2를 사용하고 있습니다.
테이블의 레코드에 대한 우선 순위 기준 정렬을 원합니다.
그래서 나는 CASE WHEN 문구를 ORDER BY 절에 사용하고 있습니다.ORDER BY 절은 다음과 같습니다.
ORDER BY
CASE WHEN TblList.PinRequestCount <> 0 THEN TblList.PinRequestCount desc, TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC END,
CASE WHEN TblList.HighCallAlertCount <> 0 THEN TblList.HighCallAlertCount desc, TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC END,
Case WHEN TblList.HighAlertCount <> 0 THEN TblList.HighAlertCount DESC, TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC END,
CASE WHEN TblList.MediumCallAlertCount <> 0 THEN TblList.MediumCallAlertCount DESC, TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC END,
Case WHEN TblList.MediumAlertCount <> 0 THEN TblList.MediumAlertCount DESC, TblList.LastName ASC, TblList.FirstName ASC, Patlist.MiddleName ASC END
그러나 그것은 줍니다.Incorrect syntax near the keyword 'desc'
해결책은?
또한 나는 다음을 가질 수 있습니다.
TblList.PinRequestCount <> 0 and TblList.HighCallAlertCount <> 0 and
TblList.HighAlertCount <> 0` and TblList.MediumCallAlertCount <> 0 and
TblList.MediumAlertCount <> 0
동시에
CASE
식 - 행당 단일 스칼라 값을 반환합니다.다른 것의 구문 분석 트리의 복잡한 부분을 반환할 수 없습니다. 예를 들어,ORDER BY
a절SELECT
진술.
필요한 것은 다음과 같습니다.
ORDER BY
CASE WHEN TblList.PinRequestCount <> 0 THEN TblList.PinRequestCount END desc,
CASE WHEN TblList.HighCallAlertCount <> 0 THEN TblList.HighCallAlertCount END desc,
Case WHEN TblList.HighAlertCount <> 0 THEN TblList.HighAlertCount END DESC,
CASE WHEN TblList.MediumCallAlertCount <> 0 THEN TblList.MediumCallAlertCount END DESC,
Case WHEN TblList.MediumAlertCount <> 0 THEN TblList.MediumAlertCount END DESC,
TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC
또는 가능성:
ORDER BY
CASE
WHEN TblList.PinRequestCount <> 0 THEN TblList.PinRequestCount
WHEN TblList.HighCallAlertCount <> 0 THEN TblList.HighCallAlertCount
WHEN TblList.HighAlertCount <> 0 THEN TblList.HighAlertCount
WHEN TblList.MediumCallAlertCount <> 0 THEN TblList.MediumCallAlertCount
WHEN TblList.MediumAlertCount <> 0 THEN TblList.MediumAlertCount
END desc,
TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC
a) 달성하려는 실제 정렬 순서를 설명하지 않았고 b) 샘플 데이터와 예상 결과를 제공하지 않았기 때문에 위(또는 다른 것) 중에서 원하는 것이 무엇인지 구분하는 것은 약간 까다롭습니다. 이를 통해 달성하려는 실제 정렬 순서를 추론할 수 있습니다.
이것이 저희가 찾고 있는 답일 수 있습니다.
ORDER BY
CASE
WHEN TblList.PinRequestCount <> 0 THEN 5
WHEN TblList.HighCallAlertCount <> 0 THEN 4
WHEN TblList.HighAlertCount <> 0 THEN 3
WHEN TblList.MediumCallAlertCount <> 0 THEN 2
WHEN TblList.MediumAlertCount <> 0 THEN 1
END desc,
CASE
WHEN TblList.PinRequestCount <> 0 THEN TblList.PinRequestCount
WHEN TblList.HighCallAlertCount <> 0 THEN TblList.HighCallAlertCount
WHEN TblList.HighAlertCount <> 0 THEN TblList.HighAlertCount
WHEN TblList.MediumCallAlertCount <> 0 THEN TblList.MediumCallAlertCount
WHEN TblList.MediumAlertCount <> 0 THEN TblList.MediumAlertCount
END desc,
TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC
여기서 나온 또 다른 간단한 예는..
SELECT * FROM dbo.Employee
ORDER BY
CASE WHEN Gender='Male' THEN EmployeeName END Desc,
CASE WHEN Gender='Female' THEN Country END ASC
아마도 당신은 그것을 사용할 수 있습니다.WITH
절 :
WITH request AS (
SELECT id
, CASE
WHEN a > 100 THEN 1
ELSE 0
END AS example
FROM table
)
SELECT *
FROM request
ORDER BY example DESC
또한 다음과 같은 경우에도 작동합니다.WHERE
절
declare @OrderByCmd nvarchar(2000)
declare @OrderByName nvarchar(100)
declare @OrderByCity nvarchar(100)
set @OrderByName='Name'
set @OrderByCity='city'
set @OrderByCmd= 'select * from customer Order By '+@OrderByName+','+@OrderByCity+''
EXECUTE sp_executesql @OrderByCmd
언급URL : https://stackoverflow.com/questions/19486882/case-when-statement-for-order-by-clause
'programing' 카테고리의 다른 글
선형 회귀 분석에서 p-값 및 r-값 추출 (0) | 2023.07.08 |
---|---|
Oracle IN 절에서 LIKE 사용 (0) | 2023.07.03 |
Vuex: 세터가 작동하지 않고 입력이 기록되지 않습니까? (0) | 2023.07.03 |
함수에서 저장 프로시저 실행 (0) | 2023.07.03 |
축 눈금 수 증가 (0) | 2023.07.03 |