我有一个如下所示的表格:
acronym | word
FCN | FCN
FCN | Fourth Corner Neurosurgical Associates
FHS | FHS
HW | HW
如您所见,有些首字母缩略词具有匹配的单词,有些则没有。我想保留具有匹配单词的首字母缩略词。对于没有匹配单词的首字母缩略词,我想保留首字母缩略词本身。我希望结果表看起来像:
acronym | word
FCN | Fourth Corner Neurosurgical Associates
FHS | FHS
HW | HW
我还想不出一种方法来实现这一点。可能按“首字母缩略词”分组并选择“单词”,但什么算法可以决定删除“FCN”或“第四角神经外科协会”
最佳答案
假设不能有任何“坏”词:
DELETE myTable
FROM myTable del
WHERE [acronym] = [word]
AND EXISTS ( SELECT *
FROM myTable lw -- Longer Word
WHERE lw.[acronym] = del.[acronym]
AND Len(lw.[word]) > Len(lw.[acronym]) )
或者,当存在读取例如的“坏”其他(较长)记录时,您是否想避免删除SQL|SQL
? SQL|发生奇怪的事情
?
重读这个问题,我现在怀疑您是否真的想要DELETE
这些记录,或者只是想从中SELECT
过滤掉定制记录。在后一种情况下,您必须使用(包括 mellamokb 的建议)
SELECT [acronym], [word]
FROM myTable mt
WHERE [acronym] <> [word]
OR NOT EXISTS ( SELECT *
FROM myTable lw
WHERE lw.[acronym] = mt.[acronym]
AND lw.[word] <> lw.[acronym] )
关于sql server 删除重复的首字母缩略词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22768571/