首页 > 其他分享 >行转列及存储过程的简单记忆

行转列及存储过程的简单记忆

时间:2022-09-22 20:02:16浏览次数:73  
标签:存储 set -- 转列 EN 记忆 sql DEVICE CONCAT

delimiter $$
CREATE PROCEDURE getDeviceRow7(
IN deviceType VARCHAR(50),
IN page INT(10),
IN size INT(10) ,
IN deviceValue VARCHAR(50)
)
BEGIN
-- 1.定义一个sql变量
SET @sql = NULL;

-- 2.把我们的查询设备的sql赋给变量
SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(IF(DEVICE_NAME_EN = ''', DEVICE_NAME_EN, ''', DEVICE_VALUE, NULL)) AS ', DEVICE_NAME_EN ) ) INTO @sql
FROM t_dap_device ;

-- 2.1拼接上条件的sql
set @whereSql = if((deviceType is null) or (deviceType=''),'',CONCAT('AND DEVICE_TYPE= ',deviceType) ) ;

-- 2.21 拼接模糊条件
set @param =CONCAT('AND DEVICE_VALUE like '%',deviceValue,'%'');

-- 2.2 拼接上and 条件
set @andSql =if( (deviceValue is null) or (deviceValue='') ,'',CONCAT( ' and DEVICE_NAME_EN = ''deviceName''', @param ) );

-- 2.3拼接分页sql
set @page =CONCAT(' LIMIT ', page ,',', size);

-- 2.4 拼接group by
set @g =' GROUP BY DEVICE_ID ';

-- 3.拼接sql
SET @sql = CONCAT('SELECT DEVICE_ID, DEVICE_NAME_EN, ', @sql ,'
FROM t_dap_device where 1=1 ',@whereSql,'',@andSql,'',@g,'',@page );

-- 预处理语句
PREPARE stmt FROM @sql;
-- 执行
EXECUTE stmt;
-- 销毁
DEALLOCATE PREPARE stmt;
END$$
delimiter;

-- 删除一个存储过程
DROP PROCEDURE getDeviceRow7

-- 执行存储过程
CALL getDeviceRow7('',0,2,'');

参考博客
https://www.jb51.net/article/251890.htm

https://blog.csdn.net/MGmuscler/article/details/125149998

行转列的数据转化定义的存储过程(但是因为模糊查询的需求问题,不能的到很好的解决只能变换方案,这只是一个简单的案例初级入门的简单案例方便日后记忆)

标签:存储,set,--,转列,EN,记忆,sql,DEVICE,CONCAT
From: https://www.cnblogs.com/al88cn/p/16720684.html

相关文章

  • Android 11 存储权限适配指南
    (1)Android权限分类普通权限:只需要在清单文件中注册即可危险权限:需要在代码中动态申请,以弹系统Dialog的形式进行请求特殊权限:需要在代码中动态申请,以跳系统Activity......
  • MySQL存储引擎中的MyISAM和InnoDB区别详解
    MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(IndexedSequentialAccessMethod:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transacti......
  • 内存管理——记忆集和读写屏障
    记忆集和读写屏障由于对堆使用了分代管理,所以在对新生代进行GC的时候需要将老年代对新生代中对象的引用也当做根来看待,所以在根标记的过程中也需要对老年代的引用进行标记......
  • pinia持久化存储插件pinia-plugin-persist
    官方文档:https://seb-l.github.io/pinia-plugin-persist/#vue3安装:npmipinia-plugin-persist--save使用,注意是pinia.use(piniaPersist)import{pinia}from'@/stores/s......
  • Android 11 高版本 出现外部存储无法访问的问题
    问题起因:安卓11,同一个APK, 安装后在本地Download目录创建了一个文件, 然后卸载这个APK。在重新安装这个APK,之前创建的文件就不能访问。签名我这边也设置过的,也还是一样的......
  • MySQL维护之存储引擎(表类型)
    MySQL中的数据用各种不同的技术存储在文件(或内存)中。在MySQL架构原理之体系架构-池塘里洗澡的鸭子-博客园(cnblogs.com)中可以看到其在MySQL中的第3层。官......
  • “EXP-00003: 未找到段 (0,0) 的存储定义”错误
    导出oracle11.2.0.2的服务器的数据时,报“EXP-00003:未找到段(0,0)的存储定义”错误。初步分析是由于数据表是空表导致该问题。Oracle11G在用EXPORT导出时,空表不能导......
  • mysql(9)存储引擎
    MySQL体系结构存储引擎简介存储引擎是基于表的,不是基于数据库的,每个表可以单独指定存储引擎InnoDBInnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之......
  • oracle杀死存储过程的死锁
    杀死存储过程死锁:下面语句依次执行:```SELECTSIDASSID1FROMV$ACCESSWHEREOBJECT='GZ_JOB_RABBIT';SELECTSIDASSID2,SERIAL#,PADDRFROMV$SESSIONWHERESID=S......
  • 【操作系统-存储】存储的分配和管理方式
    目录1连续分配方式1.1单一连续分配1.2固定分区分配1.3动态分区分配1.3.0空闲分区的回收1.3.1首次适应算法1.3.2邻近适应算法1.3.3最佳适应算法1.3.4最坏(最大)适应......