2012-11-07 1 views
0

SQL_Latin1_General_CP1_CI_AS과 같이 대소 문자를 구분하지 않는 데이터 정렬을 사용하는 고유 쿼리를 사용하면 대/소문자를 구분하지 않는 행이 처음으로 검색됩니다.SQL - 대소 문자를 구분하지 않는 데이터 정렬 쿼리 - 첫 번째 대신 소문자 행 검색

하지만 두 경우가 모두있는 경우 소문자를 검색하고 싶습니다.

데이터에 사례가 하나만있는 경우 해당 사례를 검색하고 싶습니다. (자본 케이스의 독특한 발생은 결과 집합의 자본 경우에 남아 있어야)

테이블 :

id | col1 
---------- 
1 | Ab 
2 | ab 
3 | cd 
4 | Cd 
5 | Ef 

검색어 :

SELECT DISTINCT [col1] COLLATE SQL_Latin1_General_CP1_CI_AS 
FROM dbo.table 

가 검색됩니다 Ab, cd, Ef

하지만 검색하고 싶습니다 :ab, cd, Ef

원하는 결과를 얻을 수있는 데이터 정렬이 있습니까?

첫 번째 경우 대신 소문자 우선 순위를 지정하십시오.

그렇지 않은 경우 subselects를 사용해야합니다.

  1. 이해야처럼 대소 문자를 구분 데이터 정렬을

답변

0

select 
    min(T.col1 collate SQL_Latin1_General_CP1_CS_AS) 
from dbo.Table as T 
group by T.col1 collate SQL_Latin1_General_CP1_CI_AS 
0123과 같이 할 수있다 : 그것을 할
+0

여러 열이 있어도 작동하는 것 같습니다! – djmj

+0

그래서 유용하다고 생각하면 대답을 수락 하시겠습니까 –

+0

안녕하세요. 걱정하지 마십시오. 이 질문은 일을하고 있었고 그 이후로는 그렇게하지 못했습니다. min 기능에서 단점이있을 수 있다면 100 % 확실하지 않았습니다. 직장에서 다음날 다시 확인해야합니다. 그럼 내가 받아 들일거야. – djmj

0

뭔가를 사용하여 1에서 대소 문자를 구분 데이터 정렬 (이상하게 자동으로 정렬되어, 거의 사용 사례 내가 원하는!)

  • 선택을 사용하여 모든 고유 값을 선택

    WITH cte As 
    (
        SELECT 
         ID, 
         Col1, 
         ROW_NUMBER() OVER 
         (
         PARTITION BY 
          Col1 COLLATE SQL_Latin1_General_CP1_CI_AS 
         ORDER BY 
          Col1 COLLATE SQL_Latin1_General_CP1_CS_AS DESC, 
          ID 
        ) As RowNumber 
        FROM 
         dbo.Table 
    ) 
    SELECT 
        ID, 
        Col1 
    FROM 
        cte 
    WHERE 
        RowNumber = 1 
    ; 
    
  • +0

    DESC를 제거하면 하나의 열에 적용됩니다. 그런 작업에 꽤 복잡해 보입니다. 데이터 정렬을 두 번 사용하는 하위 쿼리의 제 생각은 작동하지 않습니다. sql은 두 번 콜레이트 (일견 조회 사용)를 금지합니다. 하지만 여러 컬럼에서 'PARTITION BY'와'ORDER BY' 컬럼에 두번째 컬럼을 추가하려고 할 때 작동하지 않는다. – djmj