sql sqlserver的特殊函数COALESCE和PIVOT的用法分析

news2025/3/13 6:24:29

一、COALESCE是一个返回参数中第一个非NULL值的函数,

列如:COALESCE(a,b,c,d,e);可以按照顺序取abcde,中的第一个非空数据,abcde可以是表达式

用case when 加ISNULL也可以实现,但是写法复杂了
    

     --根据部件id获取产品型号的板材指定类型,1-获取客户的板材指定方式是真指定就是真指定,
     --2-获取不可替代本厂编号是否是不可替代,是就是真指定
     --3-获取MI上的客户是否指定板材,是就是加指定,否则就是不指定
select  temp1.ProductPartId,
max(CASE WHEN temp1.BoardType='真指定' THEN '真指定' else null end) as pnBoardType
,max(CASE WHEN temp1.ProductNumber1 is not null THEN '真指定' else null end) as pnBoardType2
,max(CASE WHEN temp3.bckhyq ='是' THEN '假指定' else '不指定' end )as pnBoardType3

,COALESCE(CASE WHEN temp1.BoardType='真指定' THEN '真指定' else null end, CASE WHEN temp1.ProductNumber1 is not null THEN '真指定' else null end, CASE WHEN temp3.bckhyq ='是' THEN '假指定' else '不指定' end) AS pnBoardTypetemp 
 
INTO    #temp44
from  #temp11 temp1
LEFT JOIN #temp33 temp3 on temp3.ProductPartId=temp1.ProductPartId

GROUP BY temp1.ProductPartId,COALESCE(CASE WHEN temp1.BoardType='真指定' THEN '真指定' else null end, CASE WHEN temp1.ProductNumber1 is not null THEN '真指定' else null end, CASE WHEN temp3.bckhyq ='是' THEN '假指定' else '不指定' end);

二、PIVOT函数,用于行转列

SELECT [非旋转列], [旋转后的列1], [旋转后的列2], ...
FROM 
    (SELECT [原始数据列] FROM 表) AS 数据源
PIVOT 
(
    [聚合函数](被聚合列)
    FOR [旋转列] IN ([列值1], [列值2], ...)
) AS 别名
  1. 非旋转列:结果中保持为行的列(如产品类别、年份等)。

  2. 旋转列:需要从行值转换为列名的列(如月份、状态等)。

  3. 被聚合列:需要统计的数值列(如销售额、数量等)。

  4. 聚合函数:如 SUMAVGCOUNT 等。

SELECT top 10 t.ProductPartId
        ,t.bcjclx
        ,t.BCXH
        ,t.bckhyq from  (
SELECT p.ProductPartId, eo.ParamCode, p.ParamValue
         FROM SL_pe_Schema.MakeProductPart(NOLOCK)part
              JOIN SL_pe_Schema.MakeProcedureParam(NOLOCK)p ON p.ProductPartId=part.ProductPartId
              JOIN SL_pe_Schema.BaseEngineersParam(NOLOCK)eo ON eo.EngineersParamId=p.EngineersParamId
         WHERE eo.ParamCode IN ('bckhyq','bcjclx','dlcc','PPQTY','bcgys','yhhd', 'sfht', 'bh', 'wulu', 'tgvalue', 'jcth', 'lvhao', 'lvhou', 'drxs', 'JZCH','BCXH','tblx')
            ) tmp     
                PIVOT(min(tmp.ParamValue)
                FOR tmp.ParamCode  IN(bckhyq,bcjclx,dlcc,PPQTY,bcgys,yhhd, sfht, bh, wulu, tgvalue, jcth, JZCH,BCXH,tblx,lvhou,lvhao,drxs)
                ) t 

将原始数据行专列

当然平常的数据库可能没有这个函数,还是有通用方法的,那就是CASE WHEN,只要参数名是固定已知的,就可以用CASE WHEN加聚合函数进行 group by  行转列


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2300495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能猫眼实现流程图

物理端开发流程图 客户端端开发流程图 用户功能开发流程图 管理员开发流程图

foobar2000设置DSP使用教程及软件推荐

foobar2000安卓中文版:一款高品质手机音频播放器 foobar2000安卓中文版是一款备受好评的高品质手机音频播放器。 几乎支持所有的音频格式,包括 MP3、MP4、AAC、CD 音频等。不论是经典老歌还是最新的流行音乐,foobar2000都能完美播放。除此之…

【R语言】回归分析与判别分析

一、线性回归分析 1、lm()函数 lm()函数是用于拟合线性模型(Linear Models)的主要函数。线性模型是一种统计方法,用于描述一个或多个自变量(预测变量、解释变量)与因变量(响应变量)之间的关系…

AllData数据中台核心菜单十三:数据湖平台

🔥🔥 AllData大数据产品是可定义数据中台,以数据平台为底座,以数据中台为桥梁,以机器学习平台为中层框架,以大模型应用为上游产品,提供全链路数字化解决方案。 ✨奥零数据科技官网:…

Spring Cloud Gateway中断言路由和过滤器的使用

一,Gateway概念 Spring Cloud Gateway(简称 Gateway)是一个基于 Spring WebFlux 的 API 网关解决方案,旨在为微服务架构中的客户端提供路由、负载均衡、认证、限流、监控等功能。它作为微服务架构中的流量入口,通常位…

AcWing 798. 差分矩阵

题目来源: 找不到页面 - AcWing 题目内容: 输入一个 n 行 m 列的整数矩阵,再输入 q 个操作,每个操作包含五个整数 x1,y1,x2,y2,c,其中 (x1,y1) 和 (x2,y2)表示一个子矩阵的左上角坐标和右下角坐标。 每个操作都要将…

Docker 部署 MySQL 8 详细图文教程

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …

【Python】模式匹配 match语句详解(仅在Python 3.10及以上版本中可用)

文章目录 模式匹配 match语句(仅在 Python 3.10及以上版本 中可用)1. 基本语法2. 基本匹配操作2.1 匹配常量2.2 匹配变量2.3 匹配元组2.4 匹配列表2.5 匹配字典2.6 条件匹配 3. 应用场景 模式匹配 match语句(仅在 Python 3.10及以上版本 中可用) Python 3.10 及以上版本中才引…

算法与数据结构(最小栈)

题目 思路 为了返回栈中的最小元素,我们需要额外维护一个辅助栈 min_stack,它的作用是记录当前栈中的最小值。 min_stack的作用: min_stack的栈顶元素始终是当前栈 st 中的最小值。 每当st中压入一个新元素时,如果这个元素小于等…

openCV中如何实现滤波

图像滤波用于去除噪声和图像平滑,OpenCV 提供了多种滤波器: 1.1. 均值滤波: import cv2# 读取图像 image cv2.imread("example.jpg")# 均值滤波 blurred_image cv2.blur(image, (5, 5)) # (5, 5) 是滤波核的大小 滤波核大小的…

2025 BabitMF 第一期开源有奖活动正式开启 !

为了促进开源社区的交流与成长,字节跳动开源的多媒体处理框架 BabitMF (GitHub - BabitMF/bmf: Cross-platform, customizable multimedia/video processing framework. With strong GPU acceleration, heterogeneous design, multi-language support, e…

Docker 安装和配置 Nginx 详细图文教程

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …

链表和list

链表和list ‍ ​ ​ ​ ​ ​ ​ ​ ​ ​ 算法题中的经典操作:用空间代替时间​ ​ ​ ​ 双链表头插顺序: 1.先修改新结点的左右指针 2.然后修改结点y的左指针 3.最后修改哨兵位的右指针 双链表在任意位置(p)之后插入…

深度学习机器学习:常用激活函数(activation function)详解

目录 Sigmoid Function ReLU(Rectified Linear Unit) LeakyReLU(Leaky Rectified Linear Unit) ClippedReLU(Clipped Rectified Linear Unit) PRelu(Parametric ReLU) Tanh&am…

AIGC图生视频保姆级教程

一、AI文生图高阶技巧 推荐工具 ▸ MidJourney(艺术感最强) ▸ DALLE 3(与ChatGPT深度联动) ▸ Leonardo.ai(精细化参数控制) 核心策略 提示词架构: [主体描述][环境氛围][镜头语言][风格参数…

下载安装运行测试开源vision-language-action(VLA)模型OpenVLA

1. 安装 项目官网OpenVLA 首先按照官网提示的以下代码,执行创建环境->安装最小依赖->git克隆项目等 # Create and activate conda environment conda create -n openvla python3.10 -y conda activate openvla# Install PyTorch. Below is a sample comma…

【Zookeeper如何实现分布式锁?】

Zookeeper如何实现分布式锁? 一、ZooKeeper分布式锁的实现原理二、ZooKeeper分布式锁的实现流程三、示例代码四、总结一、ZooKeeper分布式锁的实现原理 ZooKeeper是一个开源的分布式协调服务,它提供了一个分布式文件系统的接口,可以用来存储和管理分布式系统的配置信息。 …

【MySQL】环境变量配置

环境变量英文名SystemRoot,直译为“系统总(根)目录",主要指明操作系统的重要目录在哪里。那么配置MySQL的环境变量,就是在程序运行时,告诉操作系统你的MySQL目录位置。 复制MySQL安装目录:…

为AI聊天工具添加一个知识系统 之103 详细设计之44 自性三藏 之4 祖传代码 之2

本文要点 要点 前面的所有讨论都是为了给出我的设计项目(为使用AI聊天工具的聊天者 开挂一个知识系统) 的祖传代码 的完整设计,其中 的“槽”(占位符变量)的 库元(宝性和自性creator -本俱 替换内容标准模…

假面与演员:到底是接口在使用类,还是类在使用接口?编程接口与物理接口的区别又是什么?

前言:本篇文章解释了接口学习过程中的2个常见问题,一个是“为什么是类在使用接口”,另一个一个是“编程接口与物理接口的差异源于所处的抽象层次和交互模式的不同”,旨在揭示编程接口的本质。 Part1.是类在使用接口 当学习接口时…