SQL大小写敏感的分组查询

3

介绍

我有一张表,其中有一个名为“AccountCode”的列和其他列。有一些帐户代码是相同的,但区分大小写。 例如:

AccountCode   OrderId
ABC           O001
ABC           O002
abc           O003
DEF           O004

目标

我希望查询在AccountCode列上进行分组,并获取相应的计数。预期输出应该像这样:

ABC      2
abc      1
DEF      1

我尝试使用COLLATE Latin1_General_CS_AS,但无法得到期望的结果。
以下查询不会提供区分大小写的输出。
select accountCode COLLATE Latin1_General_CS_AS, count(OrderId) 
from <<TableName>> 
group by accountCode

3
group by accountCode COLLATE Latin1_General_CS_AS 这样做就可以了。 - user330315
你说得对,我在Group By子句后面漏掉了COLLATE Latin1_General_CS_AS。我想知道为什么我们需要在Select子句和Group By子句后面都定义相同的内容。 - Vikas Vaidya
3个回答

4
在GROUP BY子句中,也要指定COLLATE。
select accountCode COLLATE Latin1_General_CS_AS, count(OrderId)  
from <<TableName>>  
group by accountCode COLLATE Latin1_General_CS_AS

2
create table #a
(
AccountCode varchar(10)  , OrderId varchar(10)
)
insert into #a values
('ABC','O001'),
('ABC','O002'),
('abc','O003'),
('DEF','O004')

select accountCode COLLATE Latin1_General_CS_AS, count(OrderId) from #a group by accountCode COLLATE Latin1_General_CS_AS

-1

BEGIN TRAN CREATE TABLE #Temp(AccountCode VARCHAR(100),OrderId VARCHAR(100))

INSERT INTO #Temp(AccountCode ,OrderId) SELECT 'ABC','O001' UNION ALL SELECT 'ABC','O002' UNION ALL SELECT 'abc','O003' UNION ALL SELECT 'DEF','O004'

SELECT AccountCode COLLATE Latin1_General_CS_AS, COUNT(OrderId) FROM #Temp GROUP BY accountCode COLLATE Latin1_General_CS_AS

ROLLBACK TRAN


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接