首页 > 数据库 >SQL SERVER 动态行转列代码

SQL SERVER 动态行转列代码

时间:2024-06-19 11:30:52浏览次数:12  
标签:TicketCode MAX SERVER 转列 SQL TicketsHistoryData NVARCHAR SELECT

在实际的项目操作中,数据统计偶尔会用到SQLServer的行转列,

数据表MG_TicketsHistoryData如下:

列名数据类型描述
TicketDatedate
TicketCode

nchar(10)

TicketADJClosedecimal(18,2)

使用SQLServer动态行转列,代码如下:

CREATE proc [dbo].[PIVOT_TicketsHisData]
@start_date varchar(10),@end_date varchar(10)
as

DECLARE @columns NVARCHAR(MAX),@isnullcolumns NVARCHAR(MAX), @sql NVARCHAR(MAX);
SELECT @columns = STUFF((SELECT ',' + QUOTENAME(RTRIM(TicketCode)) 
                    FROM MG_TicketsHistoryData 
                    GROUP BY TicketCode
                    ORDER BY TicketCode
                    FOR XML PATH(''), TYPE
                    ).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
SELECT @isnullcolumns = STUFF((SELECT ',isnull(' + QUOTENAME(RTRIM(TicketCode))+',0) as ' +QUOTENAME(RTRIM(TicketCode))
                    FROM MG_TicketsHistoryData 
                    GROUP BY TicketCode
                    ORDER BY TicketCode
                    FOR XML PATH(''), TYPE
                    ).value('.', 'NVARCHAR(MAX)'), 1, 1, ''); 
SET @sql = 'SELECT TicketDate as date, ' + @isnullcolumns + ' FROM 
            (
                SELECT TicketDate, TicketCode,TicketADJClose
                FROM MG_TicketsHistoryData where TicketDate>='''+@start_date+''' and TicketDate<='''+@end_date+'''
            ) x
            PIVOT 
            (
                SUM(TicketADJClose)
                FOR TicketCode IN (' + @columns + ')
            ) p order by p.TicketDate';

EXEC sp_executesql @sql;

调用存储过程语句:

exec PIVOT_TicketsHisData '2022-01-01','2024-01-01'

行转列前的数据截图如下:

行转列后的数据截图如下:

标签:TicketCode,MAX,SERVER,转列,SQL,TicketsHistoryData,NVARCHAR,SELECT
From: https://blog.csdn.net/accp10422/article/details/139797337

相关文章

  • mybatis-mp 高级用法:ORM+SQL模板,真正意义实现ORM!!!
    官网:mybatis-mp.cn目前ORM以JPAPLUS为首的ORM,遇到稍微复杂的、或者数据库特性函数时通常需要自己写sql,或代码中,或xml中,这就有点难受了1:有没有好的办法?mybatis-mp的做法就是ORM+SQL模板,SQL模板不仅仅是sql字符串,它还帮你替换关系的信息:列SysUserRo......
  • MySQL存储引擎之MyISAM与InnoDB详解
    文章目录MySQL存储引擎之MyISAM与InnoDB详解MyISAM存储引擎MyISAM的特点InnoDB存储引擎InnoDB的特点InnoDB插入数据示例面试题总结解答为什么InnoDB一定要有一个主键?为什么主键要用整型?为什么主键建议使用自增?总结MySQL存储引擎之MyISAM与InnoDB详解在MySQL中,......
  • MySQL的字符集与排序规则
    在MySQL数据库中,字符集(CharacterSet)和排序规则(Collation)是两个至关重要的概念,它们共同决定了数据库中字符数据的存储、比较和排序方式。对于涉及多语言、国际化或特殊字符处理的应用来说,正确选择和使用字符集与排序规则尤为关键。一、字符集(CharacterSet)字符集定义了数据库......
  • 课题分享:学校招生信息管理系统,基于java+SSM+mysql
     一、前言介绍    在当今这个信息技术高度发展的时代,信息管理的革新已经成为了一个全球性的议题,它的影响深远而广泛。作为这一变革的一部分,“学校招生信息网”应运而生,它是一个基于Mysql数据库,通过JSP技术实现的在线平台。这个平台的建立,不仅是为了应对中国经济持续增......
  • MySQL之复制(四)
    复制复制的原理基于语句的复制在MySQL5.0及之前的版本中只支持基于语句的复制(也称为逻辑复制),这在数据库领域是很少见的,基于语句的复制模式下,主库会记录那些造成数据更改的查询,当备库读取并重放这些事件时,实际上只是把主库上执行过的SQL再执行一遍。这种方式既有好处、......
  • 关于MySQL数据库基础学习心得与体会
    引言在当今的信息化时代,数据已经成为企业和社会运行的重要驱动力。作为数据的载体,数据库管理系统(DBMS)扮演着至关重要的角色。MySQL作为最流行的开源关系型数据库管理系统之一,因其高性能、可靠性、易用性等特点,被广泛应用于各种规模的系统中。在学习了MySQL数据库基础课程之后,......
  • 数据库常见 SQL 语句及语法
    数据库操作创建数据库语法CREATEDATABASEdatabase_name;删除数据库语法DROPDATABASEdatabase_name;选择数据库语法USEdatabase_name;表操作创建表语法CREATETABLEtable_name(column1(字段)datatype(数据类型)constraints(约束条件),column2d......
  • MySQL常见的后端面试题,你会几道?
     为什么分库分表单表数据量过大,会出现慢查询,所以需要水平分表可以把低频、高频的字段分开为多个表,低频的表作为附加表,且逻辑更加清晰,性能更优随着系统的业务模块的增多,放到单库会增加其复杂度,逻辑不清晰,不好维护,所以会对业务进行微服务拆分,同时拆分数据库怎么分库分......
  • 【MySQL】——概念、逻辑、物理结构设计
    ......
  • 课题分享:校园快领服务系统,基于java+SSM+mysql
     一、前言介绍     随着中国经济的快速发展和互联网技术的普及,信息管理改革确实成为了一种广泛和全面的趋势。在这一背景下,基于MySQL数据库的校园快领服务系统应运而生,这不仅体现了信息化建设在教育领域的深入应用,也展现了现代管理手段在提高工作效率和优化服务体验......