首页 > 解决方案 > 使用 CharIndex 函数在列的子字符串上选择 Distinct

问题描述

我有 fullName 列,其中包含连接的名字和姓氏,用“-”分隔。我正在尝试选择不同的名字并进行计数(*)以查看有多少 Toms、Janes、Harry's 等......存在。

SELECT DISTINCT LEFT(fullName, CHARINDEX('-',fullName,0)-1) as firstName, count(*) as numOfNames
FROM tblFullNames
GROUP BY fullName

当我运行上面的代码时,我得到了一个正确的名字列表,但我得到一个“1”作为每个条目的名字数量的结果,即使我知道有多个 Tom's、Jane's 等......

请指教。谢谢!

标签: sqlsql-server

解决方案


您按全名分组。你可以重复这个表达式。. . 或使用cross apply

 SELECT v.firstName, count(*) as numOfNames
FROM tblFullNames fn CROSS APPLY
     (VALUES (LEFT(fn.fullName, CHARINDEX('-', fn.fullName, 0) - 1)
             )
     ) v(firstName)
GROUP BY v.firstName;

推荐阅读