入力欄がありますname
Ahar
Aris
Suchi
Doll
Dipti
出力を2列にしたい
FirstLetter TotalsWordsWithThatLetter
A Ahar, Aris
S Suchi
D Doll,Dipti
再帰的な CTE/stuff 関数が役立つことはわかっています。しかし、完全なコードを書くことはできません。
入力欄がありますname
Ahar
Aris
Suchi
Doll
Dipti
出力を2列にしたい
FirstLetter TotalsWordsWithThatLetter
A Ahar, Aris
S Suchi
D Doll,Dipti
再帰的な CTE/stuff 関数が役立つことはわかっています。しかし、完全なコードを書くことはできません。
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 Server では、XML またはその他の方法を使用して文字列をまとめる必要がありました。とは言っても、インタビューの誰かが知っていると思いstring_agg()
ます。