嵌套和嵌套

问题描述

我有一个如下表

name                value
-----        |      ------
rami         |      2
rami         |      3
rami         |      4

sam                 5
sam                 6

我想通过某种方式获得此结果

Rami      sam
-----     -----
2,3,4     5,6

解决方法

只需使用条件聚合:

select group_concat(case when name = 'Rami' then value end order by value) as rami,group_concat(case when name = 'Sam' then value end order by value) as sam
from t;
,

您这里需要一个更复杂的数据透视表

用户定义的变量@sql获取名称并添加值 外部选择由@ sql2

进行
CREATE TABLE name_val
    (`name` varchar(4),`value` int)
;
    
INSERT INTO name_val
    (`name`,`value`)
VALUES
    ('rami',2),('rami',3),4),('sam',5),6)
;
SET @sql = NULL;
SET @sql2 = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
               CONCAT('GROUP_CONCAT(IF(s.`name` = "',`name`,'",`value`,"")) AS ',name)
              ) INTO @sql
FROM name_val;
SELECT
  GROUP_CONCAT(DISTINCT
               CONCAT('MAX(',') AS ',name)
              ) INTO @sql2
FROM name_val;

SET @sql = CONCAT('SELECT ',@sql2,' FROM (SELECT ',@sql,' 
                  FROM name_val s
                 GROUP BY s.`name`
                 ORDER BY s.`name`) t1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

rami  | sam
:---- | :--
2,3,4 | 5,6

db 提琴here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...