如何做一个区分大小写的GROUP BY?

Abe*_*ler 28 sql sql-server group-by sql-server-2008

如果我执行以下代码:

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
Run Code Online (Sandbox Code Playgroud)

它返回结果:

TEST   3
tester 2
Run Code Online (Sandbox Code Playgroud)

有没有办法让该组区分大小写,以便结果如下:

Test   1
TEST   1
test   1
tester 2
Run Code Online (Sandbox Code Playgroud)

Tho*_*mas 24

您需要将文本转换为二进制(或使用区分大小写的排序规则).

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))
Run Code Online (Sandbox Code Playgroud)

使用整理:

Select Name Collate SQL_Latin1_General_CP1_CS_AS, COUNT(name)
From temp
Group By Name Collate SQL_Latin1_General_CP1_CS_AS
Run Code Online (Sandbox Code Playgroud)

  • 对于MySQL,只需将`VARBINARY`替换为`BINARY`,它就可以正常工作. (3认同)

Lam*_*mak 17

您可以使用区分大小写的排序规则:

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
Run Code Online (Sandbox Code Playgroud)


小智 10

只是:

SELECT count(*), CAST(lastname as BINARY) AS lastname_cs 
FROM names 
GROUP BY lastname_cs; 
Run Code Online (Sandbox Code Playgroud)