如何将多行数据显示为一个字符串

时间:2018-12-12 07:20:55

标签: sql sql-server vb.net

我有一个名为Skill的表,用于存储技能数据。 技能级别“ 2337”是高级,“ 2338”是中级,“ 2339”是初学者。 我想根据如下所示的技能水平显示技能名称数据 例如, 技术简介_ID = 33

高级= Javascript,SQL,C#

中级= Php

Beginner = vb,Java

我是VB的新手,谁能帮助我解决这个问题。我正在使用VB.net和数据库Microsoft SQL

enter image description here

3 个答案:

答案 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