记一次简单的存储过程和Pivot行转列
首先我很讨厌写存储过程,其次我很讨厌
没办法,主要是需要进行 行转列,项目经理说可以用Pivot。我不是很精通sql,但是我会百度呀~
pivot需要有确定的列名。那我这个项目里面没办法确定,最后问了gpt,使用动态sql(我以前也没用过),不过效果是我想要的,于是乎,改成存储过程吧。
简单的存储过程不难,其实以前我也会写,只是很久很久……似乎我工作之后就没用过,差不多就忘了……
小小总结一下
- 创建存储过程
CREATE PROC(PROCEDURE ) FactoryCalendar
//create 创建
//proc(procedure是全称,proc就行)存储过程
//FactoryCalendar 你的存过过程名字 - 可以传参或者不传参
CREATE PROCEDURE FactoryCalendar
@MD001 NVARCHAR(50)
AS
//定义的变量呢需要加@ 然后加个类型,代表参数类型
//AS关键字主要在于将参数和存储过程主体分开,as下面你就知道存储过程开始了 - 接下来就是你要执行的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行转列的更多相关文章
- SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行
ylbtech-SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行 可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表.PIVOT 通过将表达式某一列 ...
- SQL Server中使用PIVOT行转列
使用PIVOT行转列 1.建表及插入数据 USE [AdventureDB] GO /****** Object: Table [dbo].[Score] Script Date: 11/25/201 ...
- PIVOT行转列
PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合. 测试数据 INSERT INTO [TestRows2Columns] ...
- Sqlserver中PIVOT行转列透视操作
创建表: IF OBJECT_ID('T040_PRODUCT_SALES') IS NOT NULL DROP TABLE T040_PRODUCT_SALES create table T040_ ...
- 动态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 ...
- SqlServer PIVOT行转列
PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合. 测试数据 INSERT INTO [TestRows2Columns] ...
- MySQL存储过程的动态行转列
MySQL存储过程中使用动态行转列 最近做项目关于数据报表处理,然而数据库存储格式和报表展现形式不同,需要进行一下行转列的操作,在做上一个项目的时候也看了一下,但是后来换了读取方式,也就没深入研究这个 ...
- SQL Server 2008 R2——PIVOT 行转列 以及聚合函数的选择
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- SQL Server pivot 行转列遇到的问题
前段时间开发系统时,有个功能是动态加载列,于是就使用了SQL Server自带的PIVOT函数进行行转列,开始用的非常溜,效果非常好.但是提交测试后问题来了,测试添加的列名中包含空格,然后就杯具了,功 ...
- Oracle PIVOT 行转列方法
数据库中業種的存储如下图: SELECT * FROM M_TORIHIKISAKI_GYOSYU 其中GYIUSYU_CD字段代表不同的業種 而画面需要实现下图所示样式:(将每条数据的業種横向展开显 ...
随机推荐
- 云原生爱好者周刊:玩 Kubernetes 游戏,赢取免费机票
云原生一周动态要闻: Grafana 8.2.2 发布 OSM(Open Service Mesh)发布 v1.0 的第一个候选版本 谷歌宣布推出 Google Distributed Cloud K ...
- 全局负载均衡、CDN内容分发的原理与实践
CDN简介 CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发. ...
- 常见APR攻击及其防护
0x01 什么是ARP 地址解析协议--ARP:是根据IP地址获取物理地址的一个TCP/IP协议.主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的 ...
- c++11大括号初始化
C++11可以将{}初始化器用于任何类型(可以用等号,也可以不用) 数组.集合初始化 在C++11中,集合(列表)的初始化已经成为C++的一个基本功能,被称为"初始化列表": // ...
- Machine Learning Week_8 K-means And PCA
目录 1 K-means 1.1 Unsupervised Learning:Introduction 1.2 K-Means Algorithm 1.2.1 k-means algorithm 1. ...
- spring boot下跨域安全配置
1 @Bean 2 public FilterRegistrationBean corsFilter() { 3 final UrlBasedCorsConfigurationSource sourc ...
- 3-5&&6 C++数组遍历
遍历二维数组的三种方式 #include<iostream> #include<string> #include<vector> using namespace s ...
- js中栈的运用
JavaScript 中栈的运用 在 JavaScript 中,栈(Stack)是一种非常有用的数据结构,它遵循后进先出(Last In First Out,LIFO)的原则.在本文中,我们将深入探讨 ...
- git 暂存区问题
如果需要合别人的代码进来 需要暂时把自己的代码stash一下,用 git stash 放入暂存 如果需要释放出来用 git stash pop 当暂存用的越来越多,问题出现了需要清理暂存区队列,使用代 ...
- Abp Vnext Vue Element UI实现
Abp Vnext Vue Element UI实现版本开箱即用的中后台前端/设计解决方案 链接 AbpPro Vben5 Vue Element Plus 预览 点击查看效果 文档地址 点击查看文档 ...