【问题标题】:how to store in one cell rows value what have the same name but different id?如何将具有相同名称但不同 ID 的值存储在一个单元格行中?
【发布时间】:2018-04-12 09:16:42
【问题描述】:
insert into demo values ('1','name1','Text1');
insert into demo values ('2','name1','Text2');
insert into demo values ('3','name1','Text3');

我怎样才能得到这样的一行?

id | name  | value
1  | name1 | Text1 + Text2 + Text3

【问题讨论】:

  • 您使用的是哪个 RDBMS?
  • MYSQL 服务器 phpmyadmin

标签: mysql sql string-aggregation


【解决方案1】:

MYSQL:

使用GROUP_CONCAT 函数。

SELECT MIN(id), name, GROUP_CONCAT(DISTINCT Value SEPARATOR ' + ') AS Value
FROM demo
GROUP BY name 

演示

http://sqlfiddle.com/#!9/d75aca/2

MSSQL:

SELECT MIN(id), name,
       Value = STUFF((
          SELECT '+ ' + di.value + ' '
          FROM demo di
          WHERE d.name = di.name
          GROUP BY di.value
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM demo d
GROUP BY name

演示:

http://sqlfiddle.com/#!18/d75ac/2

【讨论】:

  • SELECT MIN(id), name, GROUP_CONCAT(distinct Value SEPARATOR ' + ') AS Value FROM demo GROUP BY name
【解决方案2】:

甲骨文:

SELECT MIN(ID), NAME, LISTAGG(VALUE,'+') WITHIN GROUP (ORDER BY NAME) AS VALUE
FROM DEMO 
GROUP BY NAME 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-09
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多