我有一个名为Skill的表,用于存储技能数据。 技能级别“ 2337”是高级,“ 2338”是中级,“ 2339”是初学者。 我想根据如下所示的技能水平显示技能名称数据 例如, 技术简介_ID = 33
高级= Javascript,SQL,C#
中级= Php
Beginner = vb,Java
我是VB的新手,谁能帮助我解决这个问题。我正在使用VB.net和数据库Microsoft SQL
答案 0 :(得分:2)
您可以在SQL Server 2017或更高版本上使用STRING_AGG聚合功能:
select SkillLevel, STRING_AGG(SkillName, ', ') as SkillNames
from Skills
group by SkillLevel
如果您使用的是旧版本,请查看如何使用Building a comma separated list?
这个问题中的FOR XML
子句,但是代码应如下所示:
select SkillLevel, (SELECT stuff((
SELECT ', ' + cast(SkillName as varchar(max))
FROM Skills s2
WHERE s2.SkillLevel = s1.SkillLevel
FOR XML PATH('')
), 1, 2, ''))
from Skills s1
group by SkillLevel
答案 1 :(得分:1)
SELECT SkillLevel,
SkillName = STUFF((SELECT ', ' + SkillName from tblSkill b where TechnicalProfile_ID = '33' AND b.SkillLevel = a.SkillLevel
For XML PATH('')),1,2, '')
FROM tblSkill a
Group by SkillLevel
输出类似于
SkillLevel SkillName
2337 Javascript,SQL,C#
2338 Php
2339 Vb,Java
答案 2 :(得分:0)
您可以尝试
create table #temp (skillid int, technicalprofile_id int, skilllevel int, skillname varchar(50))
insert into #temp values
(35, 21, 2339, 'Php'),
(36, 21, 2339, 'Laravel')
SELECT skilllevel, skillname =
STUFF((SELECT ', ' + skillname
FROM #temp b
WHERE b.skilllevel = a.skilllevel
FOR XML PATH('')), 1, 2, '')
FROM #temp a where skilllevel = 2339
GROUP BY skilllevel
输出如下所示
skilllevel skillname
2339 Php, Laravel