【问题标题】:SQL Case Sensitive Group BySQL 区分大小写分组方式
【发布时间】:2017-03-07 01:45:27
【问题描述】:

简介

我有一个表,其中包含“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

【问题讨论】:

  • group by accountCode COLLATE Latin1_General_CS_AS 应该这样做
  • 你说得对,我在 Group By 子句之后缺少了 COLLATE Latin1_General_CS_AS。我想知道为什么我们需要在 Select 子句和 Group By 子句之后定义相同的内容。

标签: sql sql-server collation


【解决方案1】:

在 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
    

    【讨论】:

      【解决方案3】:

      开始传输 创建表#Temp(AccountCode VARCHAR(100),OrderId VARCHAR(100))

      INSERT INTO #Temp(AccountCode ,OrderId) 选择'ABC','O001'联合所有 选择'ABC','O002'联合所有 选择'abc','O003'联合所有 选择'DEF','O004'

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

      回滚传输

      【讨论】:

        猜你喜欢
        • 2017-03-04
        • 2010-12-02
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 2011-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多