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

时间:2012-11-07 13:24:53

标签: sql distinct collation

SQL_Latin1_General_CP1_CI_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

是否有可以为我提供所需结果的整理?

优先考虑小写而不是第一种情况。

如果不是,我必须使用子选择。

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

2 个答案:

答案 0 :(得分:0)

这样的事情应该这样做:

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
;

答案 1 :(得分:0)

可能是这样的

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