2014-08-27 5 views
-1

아래의 두 쿼리는 "비공개"조건을 제외하고 완전히 동일합니다.주문 순서 설정된 레코드 수가 반환 된 후 상단 정렬이 올바르지 않음

다음 쿼리는 다음과 같은 이름의 정확한 정렬을 얻을 수 :

검색어 :

Select (Bp.Last_Name||', '||Bp.First_Name||' '||Substr(Bp.Middle_Name,1,1)) As Username 
From Scrty.User_Account Ua 
Inner Join Buspty.Business_Person Bp On Ua.Business_Person_Uuid = Bp.Business_Party_Uuid And Ua.Active_Flag = 'Y' And Bp.Last_Name Not In (**'a2s','Abdallah','Abnoosi','Abrahamson','Abrams'**) And Ua.Type = 'APPLICATION' 
Inner Join Scrty.User_Account_Aaa Uaa On Ua.Uuid = Uaa.User_Account_Uuid 
Left Outer Join Buspty.Business_Organization Bo On Bo.Business_Party_Uuid = Bp.Primary_Department_Uuid 
Left Outer Join Buspty.Business_Org_Type_Domain Botd On Bo.Business_Org_Type_Uuid = Botd.Uuid And Botd.Code =2 Left Outer Join Buspty.Network N On Bp.Primary_Network_Uuid = N.Uuid 
Order By Upper(Username) 

결과 :

TAYLOR, BRANDON 
Taylor, Brandon 
그러나

, 나는 한 번 더 이름을 제외 할 때 "Not In"조건에서 쿼리 결과는 소문자 brandon taylor가 fi가됩니다. 처음.

쿼리

Select (Bp.Last_Name||', '||Bp.First_Name||' '||Substr(Bp.Middle_Name,1,1)) As Username 
From Scrty.User_Account Ua 
Inner Join Buspty.Business_Person Bp On Ua.Business_Person_Uuid = Bp.Business_Party_Uuid And Ua.Active_Flag = 'Y' And Bp.Last_Name Not In (**'a2s','Abdallah','Abnoosi','Abrahamson','Abrams','Abruzzo'**) And Ua.Type = 'APPLICATION' 
Inner Join Scrty.User_Account_Aaa Uaa On Ua.Uuid = Uaa.User_Account_Uuid 
Left Outer Join Buspty.Business_Organization Bo On Bo.Business_Party_Uuid = Bp.Primary_Department_Uuid 
Left Outer Join Buspty.Business_Org_Type_Domain Botd On Bo.Business_Org_Type_Uuid = Botd.Uuid And Botd.Code =2 Left Outer Join Buspty.Network N On Bp.Primary_Network_Uuid = N.Uuid 
Order By Upper(Username) 

결과 :

Taylor, Brandon 
TAYLOR, BRANDON 
+0

고유 한 조합을 만드는 것이 트릭을 만들었습니다. 끝에 사용자 이름을 추가했습니다. 감사합니다 –

답변

2

당신은 동일한 값으로 주문하고, 따라서 데이터베이스가 원하는 임의의 순서를 자유롭게 선택할 수있다. 마치 order by이 전혀없는 것처럼 본질적입니다 (이것은 쿼리의 조건에 따라 데이터베이스가 정렬 순서를 변경하는 방법에 대한 좋은 예입니다 - 쿼리 결과에서 암시 적 순서를 절대 사용해서는 안된다는 또 다른 증거)

Order By Upper(Username), Ua.Uuid -- or whatever makes the combination unique 

이 사용자 이름 (대문자)이 같은 경우 동일한 정렬 순서를 보장합니다 :

당신이 order by 절에 몇 가지 고유 한 열을 포함 할 필요가 일관된 정렬 순서를 얻으려면. 타임 스탬프 값이나 다른 것을 포함시킬 수도 있습니다.

+1

상위와 하위가 함께 정렬되도록 상위 (사용자 이름), 사용자 이름을 ORDER BY 할 수도 있지만 '네이티브'대문자는 먼저 정렬됩니다. –