sql-server - 行总和和不区分大小写
问题描述
通过拥有一张包含数千个村庄的桌子,当然会有重复。为了将它们用作映射表,有必要相应地标记它们。
表如下所示;
ID | 国家 | 姓名 | 不是唯一的 |
---|---|---|---|
1234567 | 秘鲁 | 阿雷纳尔 | 无效的 |
1234568 | 墨西哥 | 阿雷纳尔 | 无效的 |
1234569 | 洪都拉斯 | 阿雷纳尔 | 无效的 |
1234570 | 美国 | 帕萨迪纳 | 无效的 |
1234571 | 加拿大 | 帕萨迪纳 | 无效的 |
1234572 | 菲律宾 | 帕萨迪尼亚 | 无效的 |
1234573 | 波兰 | 苏斯克现在 | 无效的 |
现在我使用我的代码片段来填写非唯一:
-- generate RowSum:
update
Mapping.dbo.OsmGlobal
set
notUnique = 1
from
Mapping.dbo.OsmGlobal osm
join (
SELECT [name], COUNT([name]) RowSum
FROM Mapping.dbo.OsmGlobal osm
Group by [name]
) cnt
on osm.[name] = cnt.[name]
where cnt.RowSum > 1
go
显然它会导致下面的结果,因为没有不区分大小写;
ID | 国家 | 姓名 | 不是唯一的 |
---|---|---|---|
1234567 | 秘鲁 | 阿雷纳尔 | 1 |
1234568 | 墨西哥 | 阿雷纳尔 | 1 |
1234569 | 洪都拉斯 | 阿雷纳尔 | 1 |
1234570 | 美国 | 帕萨迪纳 | 1 |
1234571 | 加拿大 | 帕萨迪纳 | 1 |
1234572 | 菲律宾 | 帕萨迪尼亚 | 无效的 |
1234573 | 波兰 | 苏斯克现在 | 无效的 |
为了在“Pasadena”的结果组中包含“Pasadeña”,我尝试添加一个collate Latin1_General_CI_AI
. 这就是我失败的地方。非常欢迎任何帮助。
解决方案
正如@TimBiegeleisen 所述,您应该使用不区分大小写的排序规则。
但是您可以使用可更新的 CTE 更简单地做到这一点
WITH osm AS (
SELECT *,
COUNT(*) OVER (PARTITION BY (name COLLATE Latin1_General_CI_AI)) RowSum
FROM Mapping.dbo.OsmGlobal osm
)
UPDATE osm
SET
notUnique = 1
WHERE osm.RowSum > 1;
推荐阅读
- amazon-lightsail - aws Lightsail Connexion 被服务器拒绝
- android - minSdkVersion vs targetSdkVersion vs maxSdkVersion
- autohotkey - 创建 ahk 睡眠定时器快速编辑
- python - 我发现此错误“NoneType”对象不可迭代
- java - OpenGL非常大的网格裁剪
- javascript - 从一种方法到另一种方法使用变量
- javascript - 立即在服务中设置使用脚本 API 创建的用户的密码
- ios - 如何制作具有动态类型支持的应用程序?
- angular - NGX代表什么,它是用来做什么的?
- javascript - 两个函数的变量不能一起工作