0

使用具有不区分大小写排序规则的独特查询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 中选择
4

2 回答 2

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
;
于 2012-11-07T13:33:03.563 回答
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
于 2012-11-07T13:48:37.727 回答