40

如果我执行下面的代码:

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

有没有办法让 group by 区分大小写,以便结果是:

Test   1
TEST   1
test   1
tester 2
4

4 回答 4

32

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

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
于 2012-06-08T16:32:58.837 回答
23

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

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
于 2012-06-08T16:36:56.750 回答
20

简单地:

SELECT count(*), CAST(lastname as BINARY) AS lastname_cs 
FROM names 
GROUP BY lastname_cs; 
于 2018-06-18T23:52:06.720 回答
2

在 MySQL/MariaDB 中,如果您不想使用排序规则或强制转换为二进制,只需使用:

SELECT MAX(name), COUNT(name)
FROM (
  select 'Test' as name
  UNION ALL
  select 'TEST'
  UNION ALL
  select 'test'
  UNION ALL
  select 'test'
  UNION ALL
  select 'tester'
  UNION ALL
  select 'tester'
) as tmp
group by MD5(name)
于 2020-10-14T01:01:24.773 回答