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

没办法,主要是需要进行 行转列,项目经理说可以用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'

记一次简单的存储过程和Pivot行转列的更多相关文章

  1. SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行

    ylbtech-SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行 可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表.PIVOT 通过将表达式某一列 ...

  2. SQL Server中使用PIVOT行转列

    使用PIVOT行转列 1.建表及插入数据 USE [AdventureDB] GO /****** Object: Table [dbo].[Score] Script Date: 11/25/201 ...

  3. PIVOT行转列

    PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合. 测试数据 INSERT INTO [TestRows2Columns] ...

  4. Sqlserver中PIVOT行转列透视操作

    创建表: IF OBJECT_ID('T040_PRODUCT_SALES') IS NOT NULL DROP TABLE T040_PRODUCT_SALES create table T040_ ...

  5. 动态PIVOT行转列

    id name subject score remark1 l math 86 2 l eng 68 3 l phy 88 4 z chn 99 5 z math 92 6 z com 98 7 z ...

  6. SqlServer PIVOT行转列

    PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合. 测试数据 INSERT INTO [TestRows2Columns] ...

  7. MySQL存储过程的动态行转列

    MySQL存储过程中使用动态行转列 最近做项目关于数据报表处理,然而数据库存储格式和报表展现形式不同,需要进行一下行转列的操作,在做上一个项目的时候也看了一下,但是后来换了读取方式,也就没深入研究这个 ...

  8. SQL Server 2008 R2——PIVOT 行转列 以及聚合函数的选择

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  9. SQL Server pivot 行转列遇到的问题

    前段时间开发系统时,有个功能是动态加载列,于是就使用了SQL Server自带的PIVOT函数进行行转列,开始用的非常溜,效果非常好.但是提交测试后问题来了,测试添加的列名中包含空格,然后就杯具了,功 ...

  10. Oracle PIVOT 行转列方法

    数据库中業種的存储如下图: SELECT * FROM M_TORIHIKISAKI_GYOSYU 其中GYIUSYU_CD字段代表不同的業種 而画面需要实现下图所示样式:(将每条数据的業種横向展开显 ...

随机推荐

  1. 在 KubeSphere 中使用 DevOps 部署 Java 微服务配置监控预警

    作者:酱油瓶,携程后端技术专家, KubeSphere 社区用户 开发 Java 微服务并引入监控组件 我们基于 Spring Cloud +Nacos 开发 Java 微服务,Java 服务开发不做 ...

  2. 服务器开启FTP

    服务器开启 FTP 操作系统:Windows 服务器镜像:Windows Server 2022 数据中心版(简体中文)64 位 一.新建用户以及文件夹 步骤 1:新建用户 打开计算机管理. 打开&q ...

  3. MongoDB mongod.log "connection refused because too many open connections" 处理方法

    一.MongoDB副本集 副本集名称 角色 IP地址 端口号 优先级 CCTV-test Primary 192.168.1.21 27017 10 Secondary 192.168.1.21 27 ...

  4. MIT 18.06 Linear Algebra by Gilbert Strang

    MIT 18.06 Linear Algebra by Gilbent Strang Text and Solution: <Introduction to Linear Algebra> ...

  5. Machine Learning Week_1 Introduction 5-8

    目录 1.5 Vedio: Supervised Learning unfamiliar words 1.6 Reading: Supervised Learning unfamiliar words ...

  6. 使用wxpython开发跨平台桌面应用,基类对话框窗体的封装处理

    在开发桌面界面的时候,往往都需要对一些通用的窗体进行一些抽象封装处理,以便统一界面效果,以及继承一些通用的处理过程,减少重复编码.本篇随笔介绍使用wxpython开发跨平台桌面应用,基类对话框窗体的封 ...

  7. 强化学习算法——TPG算法(遗传编程GP算法)代码

    tpg算法是一个使用模块涌现和复用机制的遗传编程(GP)算法,该算法在一些强化学习问题上有着不错的表现,本文给出该算法的项目地址. tpg算法的C++实现代码大概有1万的逻辑代码,如果这个比例换做使用 ...

  8. 模算术 modular arithmetic

    https://en.wikipedia.org/wiki/Modular_arithmetic#Integers_modulo_n 模算术: 整数达到特定值时会' 折返 ' 回来-- 模数 modu ...

  9. 想要硬件设计不用愁?首先要搞懂这三类GPIO!

    合宙低功耗4G模组经典型号Air780E,支持两种软件开发方式: 一种是传统的AT指令:一种是基于模组做Open开发. 传统AT指令的开发方式,合宙模组与行业内其它模组品牌在软件上区别不大,在硬件功耗 ...

  10. Python:pygame游戏编程之旅二(自由移动的小球)

    本节实现一个在窗口中自由运动的小球程序,做了详细注释,不多做解释了. 代码: # -*- coding:utf-8 -*- import sys import pygame from pygame.l ...