SQL-不区分大小写的排序规则查询-检索小写行而不是第一行

SQL-不区分大小写的排序规则查询-检索小写行而不是第一行,sql,distinct,collation,Sql,Distinct,Collation,使用具有不区分大小写排序规则(如SQL\u Latin1\u General\u CP1\u CI\u AS)的独特查询将检索第一个出现的不区分大小写的行 但如果两种情况都存在,我想检索小写 如果数据中只存在一个案例,我希望检索该案例。(大写字母的唯一出现应保留在结果集中的大写字母中) 表格: id | col1 ---------- 1 | Ab 2 | ab 3 | cd 4 | Cd 5 | Ef 查询: SELECT DISTINCT [col1] COLLATE

使用具有不区分大小写排序规则(如
SQL\u Latin1\u General\u CP1\u CI\u AS
)的独特查询将检索第一个出现的不区分大小写的行

但如果两种情况都存在,我想检索小写

如果数据中只存在一个案例,我希望检索该案例。(大写字母的唯一出现应保留在结果集中的大写字母中)

表格:

id | col1  
----------
1 | Ab  
2 | ab  
3 | cd  
4 | Cd  
5 | Ef 
查询:

SELECT DISTINCT [col1] COLLATE SQL_Latin1_General_CP1_CI_AS 
FROM dbo.table
将检索:
Ab、cd、Ef

但我想检索:
ab、cd、Ef

是否有排序规则可以提供我想要的结果?

优先考虑小写字母而不是第一个字母

如果没有,我必须使用Subselect

  • 使用区分大小写的排序规则选择所有不同的值(奇怪的是自动排序,几乎就是我想要的用例!)
  • 使用不区分大小写的排序规则从1中选择

  • 像这样的东西应该可以做到:

    WITH cte As
    (
       SELECT
          ID,
          Col1,
          ROW_NUMBER() OVER
          (
             PARTITION BY
                Col1 COLLATE SQL_Latin1_General_CP1_CI_AS
             ORDER BY
                 Col1 COLLATE SQL_Latin1_General_CP1_CS_AS DESC,
                 ID
          ) As RowNumber
       FROM
          dbo.Table
    )
    SELECT
       ID,
       Col1
    FROM
       cte
    WHERE
       RowNumber = 1
    ;
    

    可能是这样的

    select
        min(T.col1 collate SQL_Latin1_General_CP1_CS_AS)
    from dbo.Table as T
    group by T.col1 collate SQL_Latin1_General_CP1_CI_AS
    

    如果我删除DESC,它对一列有效。但对于这样的任务来说,看起来相当复杂。我对两次使用排序规则的子查询的想法不起作用,sql禁止两次使用排序规则(可能使用视图)。但是,当我想在多个列上进行区分时,将第二列添加到
    划分的分区和
    排序的分区中是行不通的。嘿,别担心。这个问题在起作用,从那时起我就不在了,我不能100%确定min函数是否有任何缺陷。在接下来的几天工作中必须重新检查。那我就接受了。