显示所有以每个字符串的第一个字母开头的值,以任何定界符分隔
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()
。
我有输入列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()
。