我们已经准备好了,你呢?

2026我们与您携手共赢,为您的企业形象保驾护航!

写在前面

处理工作数据时,有时要编制数据表格。编制表格时,有时需把时间数据设为列标题。这种情况下,必须进行行列的调换。本文以 MySQL 数据库为例,说明其如何实现行列的转换操作。

测试步骤建表语句

CREATE TABLE test_stats (
主键编号为整型,支持自动增长,是首要的索引字段,其值唯一标识每条记录。
    location VARCHAR(255),
    test_name VARCHAR(255),
    test_type VARCHAR(255),
		dev_id varchar(255),
    countDay DATE,
    test_value DOUBLE,
    test_count DOUBLE
);

插入数据

向test_stats表中插入数据,包括地点信息,测试项目名称,测试类别,设备编号,测试天数,测试数值,以及测试次数
VALUES 
河南省鹤壁市测试结果为1,记录日期是2024年7月1日,该数值为5,状态为1。
河南省鹤壁市测试结果为2,记录日期是2024年7月2日,相关数据有6项,编号为2,
河南省鹤壁市记录一次,具体为2024年7月1日,数值为2.0,评级为3。
河南省鹤壁市出现了两次,具体日期是2024年7月2日,相关数值为3.0和4。

查询结果

* from ;

以日期作为表头的sql实现_mysql set varchar_mysql行列转置报表

行列转置

设置会话中的 group_concat_max_len 参数值为一千万。
       SET @sql_value = NULL;
       SET @sql_count = NULL;
        SELECT
            COALESCE(
             GROUP_CONCAT(DISTINCT
            CONCAT(
计算当统计天数等于空字符串时的值
                countDay,
当测试值存在时使用该值,否则使用零,将其命名为`
按照年份月日格式转换计数天数,结果为,
                '`'
            )
        ),
        '0 AS `no_data`'
            ) INTO @sql_value
        FROM test_stats
在日期范围之内,具体为从2024年7月1日到2024年7月2日,统计天数符合这个条件
	
		  SELECT
           COALESCE(
           GROUP_CONCAT(DISTINCT
           CONCAT(
                'SUM(CASE WHEN countDay = ''',
               countDay,
当测试数量存在时使用该数量,否则返回零结果作为别名
                DATE_FORMAT(countDay, '%Y-%m-%d'),
               '`'
            )
       ),
       '0 AS `no_data`'
            ) INTO @sql_count
        FROM test_stats
        WHERE countDay BETWEEN '2024-07-01' AND '2024-07-02';
		
		
		
		 -- 构建故障时长的最终SQL
设定一个变量赋值为选取设备编号和测试值作为指标类型,再加上之前变量的值,后面接上
                      SUM(test_value) AS `合计`
                      FROM test_stats
在日期范围之内,具体时间从2024年7月1日到2024年7月2日
                      GROUP BY dev_id');
				  
将查询结果包含设备编号,将指标类型命名为测试数量,接着追加原有查询语句,最后完成整个表达式的拼接
                     SUM(test_count) AS `合计`
                      FROM test_stats
在日期范围之内,具体起始日为2024年7月1日,终止日为2024年7月2日,这个时间段内的记录需要筛选出来
                    GROUP BY dev_id');
				  
					  
	 -- 使用UNION ALL合并两个查询
将变量赋值为字符串拼接结果,第一个字符串包含参数值,第二个字符串包含参数计数,按照设备ID和指标类型排序,使用UNION ALL连接,整体构成SQL查询语句
       -- 准备并执行最终的动态SQL
       PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;

执行结果

以日期作为表头的sql实现_mysql set varchar_mysql行列转置报表

写在最后

最后,那个查询语句运行后,按照时间进行归类,把各项数据汇总起来,用日期做标题,还加上了总计这一项。那个查询,也可以换成其他类似形式,这样展示出来会让人更容易看懂。

这段关于行列转换的SQL语句,看似是一个存储过程,实际上能够直接放置在 里面。SQL查询中提供的时间参数(例如:2024-07-01),可以当作 中的条件输入。 的调用能够直接得到一个键值对集合。借助这个集合,相关的统计信息便可以获取了。

不过,制作报表通常需要特定的工具,例如润乾报表等。如果需求不复杂,直接运用mysql的sql语句也能解决,这是一种简便途径。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/11207.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线