【问题标题】:How to display data of multiple row into one string如何将多行数据显示为一个字符串
【发布时间】:2018-12-12 07:20:54
【问题描述】:

我有一个名为 Skill 的表,用于存储技能数据。 技能等级“2337”是高级,“2338”是中级,“2339”是初学者。 我想根据看起来像这样的技能级别显示技能名称数据 例如, Technical Profile_ID = 33

高级 = Javascript、SQL、C#

中级 = Php

初学者 = vb,Java

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

【问题讨论】:

  • 请提供您的表格结构

标签: sql sql-server vb.net


【解决方案1】:

您可以在 SQL Server 2017 或更高版本上使用STRING_AGG 聚合函数:

select SkillLevel, STRING_AGG(SkillName, ', ') as SkillNames
from Skills
group by SkillLevel

如果您使用的是旧版本,请查看如何在此问题中使用FOR XML 子句:Building a comma separated list? ,但代码应如下所示:

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

【讨论】:

  • 我使用的是SQL Server 2014,功能不可用。
  • 我稍微编辑了代码以显示特定 id 的结果,我得到了我想要的但问题是第一个数据没有显示全文,它遗漏了第一个字母数据。
【解决方案2】:
    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

【讨论】:

    【解决方案3】:

    你可以试试这个

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多