其实是个很简单的操作了,但长时间不用有点忘记了,正好项目上遇到这样的需求便把过程记录了下来。

一 需求描述

将河道水情表 结构如下,现在需要将水位Z字段由行展示转换为列展示。查询结果为展示时间和每个测站最近一次上报的数据。

实现效果如下:

二.实现过程

代码其实很简单。这里不需要说明很多直接附上sql语句

 SELECT TM,

   MAX(CASE WHEN STCD='05283556' THEN Z ELSE NULL END) AS 水位测站1,
MAX(CASE WHEN STCD='15553247' THEN Z ELSE NULL END) AS 水位测站2,
MAX(CASE WHEN STCD='15716184' THEN Z ELSE NULL END) AS 水位测站3,
MAX(CASE WHEN STCD='21817862' THEN Z ELSE NULL END) AS 水位测站4,
MAX(CASE WHEN STCD='21824818' THEN Z ELSE NULL END) AS 水位测站5,
MAX(CASE WHEN STCD='25669984' THEN Z ELSE NULL END) AS 水位测站6 from [dbo].[ST_RIVER_R] where TM>=(select MAX(TM) from [dbo].[ST_RIVER_R]) group by TM

到这里行转列就可以了。

我这里还需要创建一个视图表,方便查询,再附上视图创建语句

Create View  RealData AS

 SELECT TM,

   MAX(CASE WHEN STCD='05283556' THEN Z ELSE NULL END) AS 水位测站1,
MAX(CASE WHEN STCD='15553247' THEN Z ELSE NULL END) AS 水位测站2,
MAX(CASE WHEN STCD='15716184' THEN Z ELSE NULL END) AS 水位测站3,
MAX(CASE WHEN STCD='21817862' THEN Z ELSE NULL END) AS 水位测站4,
MAX(CASE WHEN STCD='21824818' THEN Z ELSE NULL END) AS 水位测站5,
MAX(CASE WHEN STCD='25669984' THEN Z ELSE NULL END) AS 水位测站6 from [dbo].[ST_RIVER_R] where TM>=(select MAX(TM) from [dbo].[ST_RIVER_R]) group by TM GO

然后查询视图表  RealData  就行了。

SqlServer 使用 case when 实现行转列,并创建视图表查询的更多相关文章

  1. oracle 使用 decode函数 或 case when 实现行转列

    ----创建测试表 create table student_score( name varchar2(20), subject varchar2(20), score number(4,1) ); ...

  2. SqlServer PIVOT函数快速实现行转列,UNPIVOT实现列转行

    我们在写Sql语句的时候没经常会遇到将查询结果行转列,列转行的需求,拼接sql字符串,然后使用sp_executesql执行sql字符串是比较常规的一种做法.但是这样做实现起来非常复杂,而在SqlSe ...

  3. SqlServer PIVOT函数快速实现行转列,UNPIVOT实现列转行(转)

    我们在写Sql语句的时候没经常会遇到将查询结果行转列,列转行的需求,拼接sql字符串,然后使用sp_executesql执行sql字符串是比较常规的一种做法.但是这样做实现起来非常复杂,而在SqlSe ...

  4. Oracle行转列操作

    有时候我们在展示表中数据的时候,需要将行转为列来显示,如以下形式: 原表结构展示如下:---------------------------产品名称    销售额     季度------------ ...

  5. SQL server 动态行转列

    用聚合函数配合CASE语句实现行转列功能: 现在分享一下具体实现代码: 转换前效果: PlanName PlanType PlanLimit 计划1 计划类型1 RMB 1,000,000 计划1 计 ...

  6. 在论坛中出现的比较难的sql问题:6(动态行转列 考试科目、排名动态列问题)

    原文:在论坛中出现的比较难的sql问题:6(动态行转列 考试科目.排名动态列问题) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 下面的几个问题,都是动态行转列的问题. ...

  7. oracle行转列实现

    1.新建测试表 create table TEST_TABLE( T1 VARCHAR2(10),--姓名 T2 VARCHAR2(10),--科目 T3 VARCHAR2(10)--成绩 ) 2.插 ...

  8. Sqlserver 列转行 行转列

    sqlserver的行转列 列转行问题 行转列:1 使用Case when 方式 CREATE TABLE [StudentScores]( [UserName] NVARCHAR(20), --学生 ...

  9. SqlServer:SqlServer(sql,游标,定时作业,行转列,列转行,公用表达式递归,merge合并)

    1.加载驱动: Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); DriverManager.getCo ...

  10. SQLServer处理行转列和列转行

    掌握SQL Server 行转列和列转行 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 ...

随机推荐

  1. ubuntu系统下安装php7.4

    目录 一.下载/更新php源 二.安装php7.4 三.修改配置 3.1 修改www.conf 文件 四.配置域名 五.nginx的配置文件 5.1 sock方式和nginx配合工作 5.2监听900 ...

  2. Ubuntu-kali配置动态ip(简单)

    使用gedit文本编辑器打开网络接口配置文件 gedit /etc/network/interfaces 新增两行内容如下: auto eth0 iface eth0 inet dhcp 其意思为:网 ...

  3. 数据转换2-无人机航拍倾斜摄影转换成OSGB格式

    首先软件的下载和安装参考下面链接 http://www.xue51.com/soft/53013.html 0.首先打开软件,要打开2个哦. 打数据处理开后台 ContextCapture Engin ...

  4. 关于UE4对象静态/动态的销毁问题整理(AddToRoot、TWeakObjectPtr)

    1.非UObject对象 即非UObject常规C++对象,创建销毁不赘述.但可以用智能指针:从而不用关心销毁逻辑: TSharedPtr<ClassA> MyObj = MakeShar ...

  5. java学习之旅(day.07)

    面向对象编程(oop) 面向过程思想:线性思维 步骤清晰简单,每一步做什么很明确 适合处理较为简单地问题 面向对象思想:总分 抽象 属性+方法=类 分类的思维模式,思考问题首先会解决问题需要哪些分类, ...

  6. ClipBord 复制 Html winform

    剪贴板针对不同的数据格式,在组织剪贴板内容时,有不同的格式要求.最简单的是,复制一般的.txt文本内容.使用方法 ClipBord.Clear(); ClipBord.SetText(str); 复制 ...

  7. 《最新出炉》系列入门篇-Python+Playwright自动化测试-49-Route类拦截修改请求-下篇

    1.简介 在日常工作和学习中,自动化测试的时候:在加载页面时,可能页面出现很多不是很重要或者不是我们所关注的,这个时候我们就可以选择不加载这些内容,以提高页面加载速度,节省资源.例如:可能页面上图片比 ...

  8. 基于ReAct机制的AI Agent

    当前,在各个大厂纷纷卷LLM的情况下,各自都借助自己的LLM推出了自己的AI Agent,比如字节的Coze,百度的千帆等,还有开源的Dify. 你是否想知道其中的原理?是否想过自己如何实现一套AI ...

  9. 使用eNSP配置灵活QinQ

    参考链接:https://blog.csdn.net/xu119718/article/details/55260519 在"使用eNSP配置端口QinQ"实验中是基于端口划分的用 ...

  10. JS注释 JS变量

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...