之前sqlserver的行转列, 可以用pivot来写.
参考这篇文章 https://www.cnblogs.com/gaizai/p/3753296.html
根据自己项目实际表,改成这样
CREATE PROCEDURE [dbo].[usp_CRMBaseInfo] -- Add the parameters for the stored procedure here @table_code varchar(50) AS BEGIN DECLARE @sql_str VARCHAR(8000) DECLARE @sql_col VARCHAR(8000) SELECT @sql_col = ISNULL(@sql_col + ',','') + QUOTENAME([FieldCode]) FROM CRMBaseInfoDefineField where tablecode=@table_code SET @sql_str = ' SELECT * FROM (SELECT [RowGuid],[FieldValue],[FieldCode] FROM ( SELECT CRMBaseInfo.FieldValue, CRMBaseInfo.RowGuid, CRMBaseInfoDefineField.FieldCode FROM CRMBaseInfo RIGHT OUTER JOIN CRMBaseInfoDefineField ON CRMBaseInfo.Guid = CRMBaseInfoDefineField.Guid )as info) p PIVOT (Max([FieldValue]) FOR [FieldCode] IN ( '+ @sql_col +')) AS pvt ' PRINT (@sql_str) EXEC (@sql_str) END
但是在MySQL的存储过程要怎么写呢? 这就花了我一天时间,因为不熟悉MySQL
参考这篇文章https://blog.csdn.net/isoleo/article/details/51726629
CREATE DEFINER=`root`@`localhost` PROCEDURE `usp_crmBaseInfo`(IN tablecode varchar(50)) BEGIN SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(c.FieldCode = ''', c.FieldCode, ''', s.FieldValue, '''')) AS ''', c.FieldCode, '\'' ) ) INTO @sql FROM CRMBaseInfoDefineField c where c.isActive=1 and c.tablecode=tablecode; select @sql; SET @sql = CONCAT('Select s.RowGuid, ', @sql, ' From CRMBaseInfoDefineField c Left Join CRMBaseInfo s On c.guid = s.guid ' ); SET @sql = CONCAT(@sql, ' Where c.tablecode = \'', tablecode, '\''); SET @sql = CONCAT(@sql, ' Group by s.RowGuid'); select @sql; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
2017-06-18 微信订阅号,获取用户openid