背景

源数据格式

地区

疾病类型

数量

北部

A类疾病

10

北部

B类疾病

20

北部

C类疾病

10

需要转换的数据格式

地区

就诊数量

北部

A类疾病:10,B类疾病:20,C类疾病:10

方法一:MySQL

我们首先来到MySQL,遇到了一个有趣的数据集。数据包含地区、疾病类型和数量信息。我们的目标是将数据转换为指定的格式,让每个地区对应一个字符串,其中包含各个疾病类型和对应数量的信息。

我使用了动态SQL,通过GROUP_CONCATCONCAT函数,生成了适当的查询语句。这样,我们可以动态地生成需要的字段,无论疾病类型的数据条数有多少,都能应对自如。

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(CASE WHEN 疾病类型 = ''',
      疾病类型,
      ''' THEN 数量 ELSE 0 END) AS `',
      疾病类型,
      '`'
    )
  ) INTO @sql
FROM 原始表;

SET @sql = CONCAT('SELECT 地区, ', @sql, ' FROM 原始表 GROUP BY 地区');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

方法二:达梦数据库

接着,我们来到达梦数据库,面对着同样的数据处理需求。我们希望利用LISTAGG函数,将数据转换成指定格式。幸运的是,达梦数据库也支持常用的SQL函数和语法,所以解决方案与MySQL类似。

SELECT
  地区,
  LISTAGG(疾病类型 || ':' || 数量, ',') WITHIN GROUP (ORDER BY 疾病类型) AS 就诊数量
FROM
  原始表
GROUP BY 地区;

在达梦数据库中,我们依然成功实现了数据格式的转换。LISTAGG函数将疾病类型和数量连接成字符串,用冒号分隔,然后用逗号分隔不同的疾病类型。