Linking

Capturing Life & Tech

  • 主页
  • 随笔
  • 关于我
所有文章 外链

Linking

Capturing Life & Tech

  • 主页
  • 随笔
  • 关于我

MySQL转置

阅读数:次 2021-11-14
字数统计: 555字   |   阅读时长≈ 2分

Table of Contents

  • 1.概述
  • 2.实现方式
    • 1.差异化类别较少情况
    • 2.多类型,通用转置sql
  • 3.感慨
  • 4.致谢

1.概述

最近工作中,遇到合作方给的数据格式为多行存储的单人单次记录,为方便领导查看,需要将其转换为单行,这时候就需要用到强大的sql转置语句。

一般分为两种情况,差异化较少以及差异化类型特别多的情况;前一种可手动设置字段名,后一种则需要脚本自动化计算。

2.实现方式

1.差异化类别较少情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 转置并创建视图

create or replace
algorithm = UNDEFINED view `v_records` as
select
`ttr`.`user_idcard` as `idcard`,
max((case `ttr`.`type` when '1' then `ttr`.`value` else 0 end)) as `type1`,
max((case `ttr`.`type` when '2' then `ttr`.`value` else 0 end)) as `type2`,
max((case `ttr`.`type` when '3' then `ttr`.`value` else 0 end)) as `type3`,
max((case `ttr`.`type` when '4' then `ttr`.`value` else 0 end)) as `type4`,
max((case `ttr`.`type` when '5' then `ttr`.`value` else 0 end)) as `type5`,
max((case `ttr`.`type` when '6' then `ttr`.`value` else 0 end)) as `type6`,
...
cast(`ttr`.`create_time` as date) as `create_time`
from
`tb_record` `ttr`
where xxx = 'xxx'
group by
`ttr`.`idcard`,
cast(`ttr`.`create_time` as date)

2.多类型,通用转置sql

  • 具体的sql说明见以下文本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
-- sql 太长必须设置
SET GLOBAL group_concat_max_len = (50*1024);
SET GLOBAL max_allowed_packet = (50*1024*1024);

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
-- max 函数在mysql5与8之间有区别,需要注意括号
'max((case when ques_code = ''',
-- ques_code 为差异化数据,作为转置依据
ques_code,
''' then answer_name end)) as "',
ques_code, -- 数字或文字(ques_name)用引号包裹做字段名
'"'
)
) INTO @sql
FROM
tb_table_name;

-- select @sql;

-- 拼接最终sql语句;idcard 为多行聚合的依据,可以是多个字段
SET @sql = CONCAT('SELECT idcard, create_time, ', @sql, ' FROM tb_table_name GROUP BY idcard');


select @sql; -- 查看sql语句,当作打断点

PREPARE stmt FROM @sql; -- sql语句
EXECUTE stmt; -- 执行sql
DEALLOCATE PREPARE stmt; -- 释放

3.感慨

  • 1.领导的需求才是第一生产力
  • 2.SQL强大,满足大部分需求
  • 3.自身对MySQL的理解还不够深入

4.致谢

  • How to Transpose Rows to Columns Dynamically in MySQL
  • How to Create Pivot Table in MySQL
  • how-to-transpose-convert-rows-as-columns-in-mysql
  • 本文作者: Linking
  • 本文链接: https://linking.fun/2021/11/14/MySQL转置/
  • 版权声明: 版权所有,转载请注明出处!
  • MySQL
  • 转置
  • CS

扫一扫,分享到微信

showdoc内网服务安装及外网映射
最近的学习-202110
  1. 1. Table of Contents
  2. 2. 1.概述
  3. 3. 2.实现方式
    1. 3.1. 1.差异化类别较少情况
    2. 3.2. 2.多类型,通用转置sql
  4. 4. 3.感慨
  5. 5. 4.致谢
© 2015-2026 Linking
GitHub:hexo-theme-yilia-plus by Litten
本站总访问量次 | 本站访客数人
  • 所有文章
  • 外链

tag:

  • weather
  • 需求
  • essay
  • basketball
  • olympic
  • nginx
  • APPScan
  • SQl盲注
  • xss
  • Ajax
  • ajax
  • ai
  • agent
  • openclaw
  • ccf
  • Nginx
  • HTML5
  • html5
  • hmtl5
  • sse
  • JavaScriptCore
  • Oracle
  • operation
  • Linux
  • deploy
  • Mac Office
  • markdown
  • ListView
  • GridView
  • MySQL
  • 慢查询
  • mongodb
  • 转置
  • thought
  • network
  • ubuntu
  • NetworkManager
  • RFKill
  • Netplan
  • avatar
  • cocoa
  • blog
  • Gitalk
  • container
  • macvlan
  • docker
  • oracle
  • cookie
  • patch
  • gitea
  • git
  • iOS
  • https
  • 多线程
  • bundle
  • 兼容性
  • HTTP
  • 绘图
  • cs
  • java
  • 效率
  • 快捷键
  • route
  • nodejs
  • pip
  • arcgis
  • arcgis 建模
  • 标识
  • redis
  • read
  • bookList
  • running
  • showdoc
  • disk
  • unit-test
  • D.Wade
  • thoughts
  • duoduo
  • Python
  • python
  • tomcat
  • 读书节
  • session
  • jdk
  • war
  • 加班
  • Android onclick事件监听
  • 正则
  • 手机品牌匹配
  • ntp
  • OpenLayers
  • Geoserver
  • wechat
  • 微信公众号
  • 爬虫
  • WeChat
  • 张靓颖
  • 动漫
  • vpn
  • PPT
  • MarkDown
  • plan
  • 朱赟
  • 极客时间专栏
  • 极客邦
  • 模块化
  • MVC
  • excel
  • NBA
  • kobe
  • team
  • crawler
  • 进度条
  • ssl
  • book
  • anti-stealing-link
  • Agentic Engineering
  • Vibe Coding
  • Software 3.0
  • Andrej Karpathy
  • LLM
  • Programming

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • GitHub Trending
  • OpenAI ChatGPT
  • Gitee码云
  • 简书
  • CSDN