복붙노트

[SQL] CASE WHEN 문 ORDER BY 절에 대한

SQL

CASE WHEN 문 ORDER BY 절에 대한

나는 SQL Server 2008 R2를 사용하고 있습니다.

나는 기반 우선 순위 테이블의 레코드를 정렬 할 수 있습니다.

나는 언제 문 ORDER BY 절에 CASE를 사용하고 있도록. 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

그러나 키워드 '내림차순'근처의 구문이 잘못을 준다

모든 솔루션?

또한, 저는 할 수 있습니다 :

TblList.PinRequestCount <> 0 and TblList.HighCallAlertCount <> 0 and
TblList.HighAlertCount <> 0` and TblList.MediumCallAlertCount <> 0 and  
TblList.MediumAlertCount <> 0 

같은 시간에.

해결법

  1. ==============================

    1.CASE 표현식 - 그것은 (행 당) 단일 스칼라 값을 반환합니다. 그것은 SELECT 문의 ORDER BY 절과 같은 다른 뭔가의 구문 분석 트리의 복잡한 부분을 반환 할 수 없습니다.

    CASE 표현식 - 그것은 (행 당) 단일 스칼라 값을 반환합니다. 그것은 SELECT 문의 ORDER BY 절과 같은 다른 뭔가의 구문 분석 트리의 복잡한 부분을 반환 할 수 없습니다.

    그냥 필요한 것 같습니다 :

    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
    

    그것은 어떤 샘플 데이터를 공급하지 않음) (또는 뭔가 다른)하지 당신이 달성하려는 실제 어떤 종류의 순서 설명, 그리고 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
    
  2. ==============================

    2.여기에서 또 다른 간단한 예 ..

    여기에서 또 다른 간단한 예 ..

    SELECT * FROM dbo.Employee
    ORDER BY 
     CASE WHEN Gender='Male' THEN EmployeeName END Desc,
     CASE WHEN Gender='Female' THEN Country END ASC
    
  3. ==============================

    3.당신은 각각의 경우를 마무리 END를 둘 필요 (내림차순 전)

    당신은 각각의 경우를 마무리 END를 둘 필요 (내림차순 전)

  4. ==============================

    4.

    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 
    
  5. from https://stackoverflow.com/questions/19486882/case-when-statement-for-order-by-clause by cc-by-sa and MIT license