복붙노트

[SQL] 어떻게 대소 문자를 구분 그룹 BY를 할까?

SQL

어떻게 대소 문자를 구분 그룹 BY를 할까?

나는 아래의 코드를 실행하면 :

with temp as
(
  select 'Test' as name
  UNION ALL
  select 'TEST'
  UNION ALL
  select 'test'
  UNION ALL
  select 'tester'
  UNION ALL
  select 'tester'
)
SELECT name, COUNT(name)
FROM temp
group by name

그것은 결과를 반환합니다 :

TEST   3
tester 2

결과가 될 것이라고 BE 대소 문자를 구분하므로으로 그룹을 수있는 방법이 있나요 :

Test   1
TEST   1
test   1
tester 2

해결법

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

    1.당신은 대소 문자를 구분 데이터 정렬을 사용할 수 있습니다 :

    당신은 대소 문자를 구분 데이터 정렬을 사용할 수 있습니다 :

    with temp as
    (
      select 'Test' COLLATE Latin1_General_CS_AS as name
      UNION ALL
      select 'TEST'
      UNION ALL
      select 'test'
      UNION ALL
      select 'tester'
      UNION ALL
      select 'tester'
    )
    SELECT name, COUNT(name)
    FROM temp
    group by name
    
  2. ==============================

    2.당신은 바이너리와 텍스트를 주조 (또는 소문자 구분 데이터 정렬을 사용)해야합니다.

    당신은 바이너리와 텍스트를 주조 (또는 소문자 구분 데이터 정렬을 사용)해야합니다.

    With temp as
    (
      select 'Test' as name
      UNION ALL
      select 'TEST'
      UNION ALL
      select 'test'
      UNION ALL
      select 'tester'
      UNION ALL
      select 'tester'
    )
    Select Name, COUNT(name)
    From temp
    Group By Name, Cast(name As varbinary(100))
    

    데이터 정렬을 사용하여 :

    Select Name Collate SQL_Latin1_General_CP1_CS_AS, COUNT(name)
    From temp
    Group By Name Collate SQL_Latin1_General_CP1_CS_AS
    
  3. ==============================

    3.간단히:

    간단히:

    SELECT count(*), CAST(lastname as BINARY) AS lastname_cs 
    FROM names 
    GROUP BY lastname_cs; 
    
  4. from https://stackoverflow.com/questions/10952696/how-to-do-a-case-sensitive-group-by by cc-by-sa and MIT license