J'ai une colonne d'entrée Je veux que la sortie soit avec deux colonnes p> Totaux de firstSwithThatletter P> nom code> A Ahar, Aris
S Suchi
D Doll,Dipti
3 Réponses :
Voici comment vous pouvez le faire.
Déclarez une table TempAre avec char et nom, puis utiliser la fonction de sous-chaîne de SQL mettez le premier caractère et le premier nom dans la table. De là, vous pouvez regrouper les résultats. P>
Voici l'échantillon pour vous pour MSSQL Server P>
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
This would lead to desired result.
La réponse à la question est la suivante:
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);
"C'était l'une de mes questions d'entrevue sur Mme SQL." I> avec le plus grand respect, ce n'est pas une interviewée. S'il s'agit d'une question d'entretien, montrez-nous ce que vous avez essayé et expliquez pourquoi cela n'a pas fonctionné.
Comment puis-je demander et répondre aux questions de devoirs?
Il n'y a pas besoin d'une requête récursive. Ceci peut être fait avec un groupe
simple par code> et une agrégation de chaîne (string_agg () code>)