显示所有以每个字符串的第一个字母开头的值,以任何定界符分隔

Display all the values which start with first letter of each string separated by any delimiter

我有输入列name

Ahar
Aris
Suchi
Doll
Dipti

我希望输出包含两列

FirstLetter TotalsWordsWithThatLetter

A Ahar, Aris
S Suchi
D Doll,Dipti

我知道递归 CTE/stuff 函数会有帮助。但是写不出完整的代码。

这就是你可以做到的。

用字符和名称声明一个临时 table,然后使用 sql 的子字符串函数将第一个字符和名称放入 table。从那里您可以对结果进行分组。

这是 mssql 服务器

的示例
declare @tbl table(ch char(1), name nvarchar(50))

insert into @tbl
select ( SELECT SUBSTRING(e.address, 1, 1)),address from Emp2 e

select ch,name From @tbl
group by ch, name

select distinct t.[ch],
  STUFF((SELECT distinct ', ' + t1.name
         from @tbl t1
         where t.[ch] = t1.[ch]
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,2,'') department
from @tbl t
declare @temp table(Name varchar(100))
insert into @temp 
values
('Ahar'), ('Aris'),('Suchi'),('Doll'),('Dipti')

select distinct substring(Name,1,1) FirstLetter,
  STUFF((SELECT distinct ', ' + t1.name
         from @temp t1
         where substring(t.Name,1,1) = substring(t1.Name,1,1)
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,2,'') Name
from @temp t

这将导致预期的结果。

问题的答案是:

select left(name, 1) as chr, count(*) as cnt,
       string_agg(name, ', ') within group (order by name) as names
from t
group by left(name, 1);

不需要递归子查询或临时表——在面试环境中,我只是假设这个人并不真正理解 SQL。

在旧版本的 SQL 服务器中,您需要使用 XML 或其他一些方法将字符串组合在一起。也就是说,我希望面试中的人知道 string_agg()