-1

入力欄がありますname

Ahar
Aris
Suchi
Doll
Dipti

出力を2列にしたい

FirstLetter TotalsWordsWithThatLetter

A Ahar, Aris
S Suchi
D Doll,Dipti

再帰的な CTE/stuff 関数が役立つことはわかっています。しかし、完全なコードを書くことはできません。

4

3 に答える 3

0
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

これにより、望ましい結果が得られます。

于 2020-02-26T09:43:37.303 に答える
0

質問への答えは次のとおりです。

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()ます。

于 2020-02-26T12:49:03.560 に答える