mysql unpivot_UNPIVOT逆透视以及动态逆透视存储过程

mysql unpivot_UNPIVOT逆透视以及动态逆透视存储过程今天练习 MSSQLServer 逆透视的功能 首先准备一些可以逆透视的数据 IFOBJECT ID tempdb dbo Part summary ISNOTNULLDRO Part summaryCREAT Part summary Item NVARCHAR 40 B DECIMAL 18 2 Q DECIMAL 18 2

今天练习MS SQL Server逆透视的功能。

首先准备一些可以逆透视的数据:

7df66837cf63aac9c0e497c99281656d.png

IF OBJECT_ID(‘tempdb.dbo.#Part_summary’) IS NOT NULL DROP TABLE #Part_summary

CREATE TABLE #Part_summary (

[Item] NVARCHAR(40),

[B]DECIMAL(18,2),

[Q]DECIMAL(18,2),

[S]DECIMAL(18,2),

[T]DECIMAL(18,2),

[U]DECIMAL(18,2)

)

INSERT INTO #Part_summary ([Item],[B],[Q],[S],[T],[U])

VALUES (‘098-SSSS1-WS0098-5526’,0,0,500.00,0,0),

(’54F-ART43-6545NN-2514′,0,0,934.39,0,0),

(‘872-RTDE3-Q459PW-2323’,0,0,0,452.44,0),

(‘B78-F1H2Y-5456UD-2530’,0,0,0,115.06,0),

(‘I32-GG443-QT0098-0001’,0,0,423.65,0,0),

(‘I38-AA321-WS0098-0506’,470.87,0,0,0,0),

(‘K38-12321-5456UD-3493’,200.28,0,0,0,0),

(‘PO0-7G7G7-JJY098-0077’,0,871.33,0,0,0),

(‘RVC-43ASE-H43QWW-9753’,0,0,0,0,555.19),

(‘X3C-SDEWE-3ER808-8764’,0,607.88,0,0,0)

SELECT [Item],[B],[Q],[S],[T],[U] FROM #Part_summary

Source Code

下面是Insus.NET实现UNPIVOT的代码:

7e8a3af6f40b3d105fd6005bda78609d.png

SELECT [Item]

,[Category]

,[Qty]

FROM #Part_summary

UNPIVOT (

[Qty] FOR [Category]

IN ([B],[Q],[S],[T],[U])

) AS [UNPIVOT TABLE]

WHERE [Qty] > 0

Source Code

以上是以手动实现逆透视。如果想实现动态逆透视。可以参考下面的存储过程:

341917939fab029331d9944d2114274a.png

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

— =============================================

— Author: Insus.NET

— Create date: 2019-05-20

— Update date: 2019-05-20

— Description: 动态逆透视

CREATE PROCEDURE [dbo].[usp_Dynamic_UnPivot]

(

@table_name SYSNAME, –透视的表名

@common_column SYSNAME, –常规共用列名

@unpivot_column SYSNAME, –逆透视列名

@sum_column SYSNAME, –计和的列名

@Comma_Delimited_Column_Names NVARCHAR(MAX)

)

AS

BEGIN

DECLARE @sql AS NVARCHAR(MAX) = N’

SELECT ‘+ @common_column +’

,’+ @unpivot_column +’

,[Qty]

FROM ‘+ @table_name +’

UNPIVOT (

‘+ @sum_column +’ FOR ‘+ @unpivot_column +’

IN (‘+ @Comma_Delimited_Column_Names +’)

) AS [UNPIVOT TABLE]

WHERE ‘+ @sum_column +’ > 0′

EXECUTE sp_executeSql @sql

END

GO

Source Code

怎样使用这个存储过程呢,参考下面参数传入方法:

2600a75400f0838ab304b8c87edbe207.png

重复一下,存储过程的参数说明如下:

@table_name SYSNAME, –透视的表名

@common_column SYSNAME, –常规共用列名

@unpivot_column SYSNAME, –逆透视列名

@sum_column SYSNAME, –计和的列名

@Comma_Delimited_Column_Names NVARCHAR(MAX)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221813.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午5:14
下一篇 2026年3月17日 下午5:14


相关推荐

  • mysql查看端口是否打开_linux查看端口是否开放

    mysql查看端口是否打开_linux查看端口是否开放在讨论这个问题前 我们先来了解一下物理端口 逻辑端口 端口号等计算机概念 端口相关的概念 在网络技术中 端口 Port 包括逻辑端口和物理端口两种类型 物理端口指的是物理存在的端口 如 ADSLModem 集线器 交换机 路由器上用于连接其他网络设备的接口 如 RJ 45 端口 SC 端口等等 逻辑端口是指逻辑意义上用于区分服务的端口 如 TCP IP 协议中的服务端口 端口号的范围从 0 到 65535 比如

    2026年3月19日
    1
  • 部门人员职位权限表设计图_职位设置

    部门人员职位权限表设计图_职位设置用户角色多对多 角色权限多对多用户部门多对多部门表 用户_部门表用户表 用户_角色表角色表  角色_权限表权限表 用户    用户_角色 (角色)    角色_菜单 菜单 — 支付 –退款 –转账 –提现 –充值 交易表账表详细账目表

    2026年4月17日
    3
  • SpringMVC工作原理及其流程

    SpringMVC工作原理及其流程本文介绍SpringMVC的基本原理,对于一个浏览器请求,SpringMVC的处理流程。SpringMVC主要包含一下组件DispatcherServlet-前端控制器HandlerMapping-处理器映射Controller-控制器ViewResolver-视图解析器View-视图Spring的请求流程SpringMVC的核心在于其请求流程,这是使用Spring…

    2022年5月14日
    40
  • Sql语句中的DML语句

    Sql语句中的DML语句一 什么是 DML 语句 DML 语句就是数据库操作语句 二 DML 语句的分类 Insert 插入 Update 修改更新 Delete 删除 Select 选择 nbsp 三 insert 语句 Deletefrom 表名名称

    2026年3月26日
    2
  • ADO.NET基础

    ADO.NET基础ADO.NET基础

    2022年4月24日
    40
  • JavaScript防抖和节流

    JavaScript防抖和节流概念函数防抖和函数节流 两者都是优化高频率执行 js 代码的一种手段 防抖 任务频繁触发的情况下 只有任务触发的间隔超过指定间隔的时候 任务才会执行 节流 指定时间间隔内只会执行一次任务 一定时间内 js 方法只跑一次 防抖 buttonid debounce 点我防抖 debounce on click deboun buttonid debounce

    2026年3月18日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号