首页 > 其他分享 >记一次简单的存储过程和Pivot行转列

记一次简单的存储过程和Pivot行转列

时间:2023-07-20 19:22:42浏览次数:24  
标签:存储 MD001 MB CMD FactoryCalendar 转列 BW Pivot

首先我很讨厌写存储过程,其次我很讨厌

没办法,主要是需要进行 行转列,项目经理说可以用Pivot。我不是很精通sql,但是我会百度呀~

pivot需要有确定的列名。那我这个项目里面没办法确定,最后问了gpt,使用动态sql(我以前也没用过),不过效果是我想要的,于是乎,改成存储过程吧。

简单的存储过程不难,其实以前我也会写,只是很久很久……似乎我工作之后就没用过,差不多就忘了……

小小总结一下

  1. 创建存储过程  
    CREATE PROC(PROCEDURE ) FactoryCalendar
    //create 创建  
    //proc(procedure是全称,proc就行)存储过程  
    //FactoryCalendar 你的存过过程名字
  2. 可以传参或者不传参
    CREATE PROCEDURE FactoryCalendar
        @MD001 NVARCHAR(50)
    AS
    //定义的变量呢需要加@ 然后加个类型,代表参数类型
    //AS关键字主要在于将参数和存储过程主体分开,as下面你就知道存储过程开始了
  3. 接下来就是你要执行的sql了。一般begin开始end结尾。不多废话了。写个案例就知道了
-- 创建存储过程,获取资源组工作日历
CREATE PROCEDURE FactoryCalendar
    @MD001 NVARCHAR(50)
AS
BEGIN
    DECLARE @Columns AS NVARCHAR(MAX)
    DECLARE @SQL AS NVARCHAR(MAX)

    -- 使用动态SQL生成资源名称的列名
    SELECT @Columns = STRING_AGG(QUOTENAME(资源名称), ', ') WITHIN GROUP (ORDER BY 资源名称)
    FROM (
        SELECT DISTINCT MB.MB002 AS 资源名称
        FROM BW_CMSMD CMD
        INNER JOIN BW_MPSMB MB ON CMD.MD003 = MB.MB003
        INNER JOIN BW_MPSMD MD ON MB.MB001 = MD.MD001
        WHERE CMD.MD001 = @MD001
    ) AS ColName;
    print @Columns;
    -- 构建动态SQL查询
    SET @SQL = '
    SELECT *
    FROM (
        SELECT 
            MB.MB002 AS 资源名称, 
            CMD.MD001 AS 部门编号, 
            CMD.MD002 AS 部门名称, 
            MD.MD002 AS 日期, 
            MD.MD003 AS 当日产能
        FROM BW_CMSMD CMD
        INNER JOIN BW_MPSMB MB ON CMD.MD003 = MB.MB003
        INNER JOIN BW_MPSMD MD ON MB.MB001 = MD.MD001
        WHERE CMD.MD001 = ''' + @MD001 + '''
    ) AS SourceData
    PIVOT (
        MAX(当日产能)
        FOR 资源名称 IN (' + @Columns + ')
    ) AS PivotedData;'

    -- 执行动态SQL查询
    EXEC(@SQL);
END

  4.执行存储过程 :有参数就这么写,没有直接 exec FactoryCalendar 

exec FactoryCalendar   '6875'

 

标签:存储,MD001,MB,CMD,FactoryCalendar,转列,BW,Pivot
From: https://www.cnblogs.com/zhang-3/p/17569431.html

相关文章

  • linux 存储结构
    存储过程是可以完成特点的一组sql语句完成功能。目录一、存储结构二、实际操作三、存储过程的参数四、总结       一、存储结构1.存储结构概述MysQL数据库存储过程是一组为了完成特定功能的SQL语句的集合。 存储过程这个功能是从5.0版......
  • ARM存储模型
      ARM存储模型数据类型——ARM采用32位架构,基本数据类型有以下三种Byte     8bitsHalfword 16bitsWord    32bits数据存储Word型数据在内存的起始地址必须是4的整数倍......
  • java图片存储软件
    如何实现Java图片存储软件介绍在这篇文章中,我将向你介绍如何实现Java图片存储软件。作为一名经验丰富的开发者,我将指导你完成整个过程。首先,我将展示整个实现过程的步骤,并使用表格形式呈现。然后,我将详细说明每一步需要做什么,并提供相应的代码示例和注释。实现步骤步骤描述......
  • mysql 最大存储量
    MySQL最大存储量MySQL是一种常用的关系型数据库管理系统,被广泛用于各种应用场景中。在使用MySQL时,你可能会想知道MySQL的最大存储量是多少,以便合理地规划你的数据库存储需求。在本文中,我们将介绍MySQL的最大存储量以及如何计算和优化存储空间。MySQL的存储模型MySQL使用一种分......
  • 10分钟带你学会阿里OSS对象存储
    一.前言最近有很多小伙伴问健哥,如果我们要进行大规模的文件存储该怎么做?其实实现文件存储的技术有很多,如果我们在网上搜索一下,你会发现实现的技术简直是五花八门,比如有一种技术叫FastDFS就可以实现文件存储,但该方案需要自己搭建服务器,非常的麻烦。实际上现在很多公司都在使用......
  • 建java存储过程
    作者:iihero一、如何创建java存储过程?通常有三种方法来创建java存储过程。1.使用oracle的sql语句来创建:e.g.使用createorreplaceandcompilejavasourcenamed"<name>"as      后边跟上java源程序。要求类的方法必须是publicstatic的,才能用于存储过程。SQL>create......
  • 对象存储、文件存储、块存储
    转自https://cloud.tencent.com/developer/article/2147181?shareByChannel=link并进行部分修改什么是文件存储?文件存储带有文件系统,主要是以文件的形式存放数据,能将所有的目录、文件形成一个有层次的树形结构来管理,通过“树”不断伸展的枝丫就能找到你需要的文件。存储协议主......
  • ReadyBoost 是什么: ReadyBoost 是一种在 Windows 操作系统中使用外部闪存设备作为虚拟
    ReadyBoost是Windows操作系统中的一个功能,它可以利用闪存驱动器(如USB闪存驱动器)作为辅助内存来提高系统的响应速度和性能。下面是关于ReadyBoost的详细解释:ReadyBoost是什么:ReadyBoost是一种在Windows操作系统中使用外部闪存设备作为虚拟内存缓存的技术。它允许将US......
  • mysql 事务和存储过程
    MySQL事务和存储过程1.事务的概念和流程事务是指一组数据库操作,它们作为一个逻辑单元一起执行,并且要么全部都执行成功,要么全部都回滚到事务开始前的状态。MySQL中的事务主要用于保证数据的完整性和一致性。以下是MySQL事务的基本流程:步骤描述1开启事务2执行SQL......
  • 5.3 存储器层次结构
    存储器层次结构的中心思想是,对于每个k,位于k层的更快更小的存储设备作为位于k+1层的更大更慢的存储设备的缓存。换句话说,层次结构中的每一层都缓存来自较低一层的数据对象。例如,本地磁盘作为通过网络从远程磁盘取出的文件(例如Web页面)的缓存,主存作为本地磁盘上数据的缓存,依此类推......