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
像这样的东西应该可以做到:
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函数是否有任何缺陷。在接下来的几天工作中必须重新检查。那我就接受了。