记一次简单的存储过程和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字段代表不同的業種 而画面需要实现下图所示样式:(将每条数据的業種横向展开显 ...
随机推荐
- 使用 GPU-Operator 与 KubeSphere 简化深度学习训练与 GPU 监控
本文将从 GPU-Operator 概念介绍.安装部署.深度训练测试应用部署,以及在 KubeSphere 使用自定义监控面板对接 GPU 监控,从原理到实践,逐步浅析介绍与实践 GPU-Operat ...
- bash 连接操作符(& && | 等)的使用
链式操作(Chaining Operators),就是用于将多个命令组合在一起,根据操作符类型执行各种复杂指令.链式操作常用于你在交互shell中写下一长串指令执行的时候,它让shell脚本的自动化能 ...
- 部署包含Oracle数据源的项目
这段时间在处理公司EAS的数据报表,需要通过ETL进行数据的抽取,当ETL都完成并在本地跑成功后,总以为万事大吉了,没想到部署到作业后,却一直无法成功,百度搜索了好多方法,跟着上面去操作还是一直报错, ...
- 0.1 Introduction to the tenth anniversary edition
此序作于2010年 1970s&1980s, 除了将量子系统仅仅视为一种自然界中需要解释的现象,大家开始将其视为可以设计的系统. 这种新的观点引起了物理,计算机科学和信息理论等领域交叉融合之后 ...
- 代码差异对比之git diff详解!
1.测试对比文件准备 文件A:diff1(diff1文件夹下可以放n个文件) public class Diff1 { public static void main(String[] args){ ...
- 2023NOIP A层联测16 T3 货物运输
2023NOIP A层联测16 T3 货物运输 题目描述说这是一个仙人掌图,通常将问题转换为环和树的问题在使用圆方树来解决. 树解法 令 \(a_i=s_i-\frac{\sum s_i}{n}\) ...
- Blocked aria-hidden on an element because its descendant retained focus.
背景 vue 2.6.10 报错:Blocked aria-hidden on an element because its descendant retained focus. The focus ...
- 读书笔记-C#8.0本质论-07
19. 平台互相操作性和不安全代码 19.1 在托管平台调用非托管代码--P/Invoke模式 CLI通过P/Invoke功能对非托管DLL所导出的函数执行API调用.和类的所有普通方法一样,必须在类 ...
- Java ScheduledThreadPoolExecutor延迟或周期性执行任务
ImportNew注: 本文由新浪微博:@小飞侠_thor投稿至ImportNew.感谢@小飞侠_thor ! 如果你希望分享好的原创文章或者译文,欢迎投稿到ImportNew. Java提供的Tim ...
- 从零开始的Python世界生活——基础篇(Python字典)
从零开始的Python世界生活--基础篇(Python字典) 1.Python字典是什么? Python字典是python中非常重要的非常灵活和强大的内置数据结构,用于存储键值对(key-valu ...