sql数据库中,如何将一个表中的多列数字合并为一列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql数据库中,如何将一个表中的多列数字合并为一列相关的知识,希望对你有一定的参考价值。

例如,表中的两字段为12,34,执行完的结果是1234

在不同的数据库有不同的方法:
mysql中是使用concat(str1,str2,...).
例:
SELECT CONCAT('My', 'S', 'QL');
结果:MySQL
oracle 使用||号.
select 'abc' || 'def' from dual;
结果:adbdef
一般情况下,我们将由不同栏位获得的资料串连在一起,每一种资料库都有提供方法来达到这个目的:
MySQL: CONCAT()
Oracle: CONCAT(), ||
SQL Server: +
其实对于非程序员,可以利用excel或是access搞定。
在excel表格中就可以实现:
D1=concatenate(a1,b1,c1);或是 D1= A1&B1&C1。
在access中,D=[A]&[B]&[C].
参考技术A select rtrim(字段1)+ rtrim(字段2) as 字段 from 表 参考技术B select 字段一+字段二 as 新的字段名 from 表 参考技术C Select concat(trim(列名1),trim(列名2))
from 表名;

将多行合并为一列,同时用原始表中的“名称”字段替换键

【中文标题】将多行合并为一列,同时用原始表中的“名称”字段替换键【英文标题】:Merge multiple rows into a column while replacing the keys with a 'name' field from the original table 【发布时间】:2022-01-22 06:53:42 【问题描述】:

我有一个连接表,其中包含“account_id”和“group id”,两者均由 GUID 表示。我正在尝试合并列,以便我们得到一个“account_id”,其中所有“group_id”都合并到一个列/行,但显示帐户和组的实际名称。

表格 帐号

account_id   Name
1            Henry
2            Smith

Group_id   Group_nameName
3            User
4            Admin

Account_Group_Join_Table

account_id   group_id
1            3
1            4
2            3

期望的结果:

Name    Groups
Henry   Dev,User
Smith   User, Admin

到目前为止的代码返回 'account_id' 和 'group_id' 分组到单行/列

select account_id,
  stuff((SELECT distinct ', ' + group_id
           FROM account_group_join t2
           where t2.account_id = t1.account_id
           FOR XML PATH('')),1,1,'') [Groups]
from account_group_join t1
group by account_id

【问题讨论】:

FOR XML PATH('')) 应该是 FOR XML PATH(''), TYPE).value('text()[1]','nvarchar(max)') 以避免 XML 转义,,1,1,'' 应该是 ,1,2,'' 或任何长度的分隔符 【参考方案1】:

您只需在子查询中加入您的组表,这样您就可以获得名称而不是 ID。您也可以在外部查询中从Account 中选择,避免额外加入帐户来获取名称:

SELECT  a.account_id,
        a.Name,
      STUFF((SELECT DISTINCT ', ' + g.group_nameName
               FROM account_group_join AS ag
                    INNER JOIN [Group] AS g
                        ON g.group_id = ag.group_id
               WHERE ag.account_id = a.account_id
               FOR XML PATH('')),1,1,'') AS [Groups]
from Account AS a;

n.b.我已将您的别名从 t1t2 更改为代表我正在别名的表的东西,您会发现这更容易,尤其是在处理较大的查询时。更多阅读:Bad Habits to Kick : Using table aliases like (a, b, c) or (t1, t2, t3)

【讨论】:

以上是关于sql数据库中,如何将一个表中的多列数字合并为一列的主要内容,如果未能解决你的问题,请参考以下文章

将多列合并为一列

【Excel】多列数据合并为一列

如何将多列合并为一列并使用自定义字符串格式化?

Dask - 将多列合并为一列

Excel - 将多列合并为一列

串联多列的值,如mysql中concat的用法。