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

一 需求描述

将河道水情表 结构如下,现在需要将水位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. 陪玩app小程序H5开发制作多少钱-软件开发,源码交付,永久售后.-陪玩线下陪玩软件搭建APP(系统、平台、源码)-游戏陪玩系统APP派单大厅H5社交圈子+多人聊天室小程序

    线下陪玩APP平台,如何防止陪玩师接私单? 线下陪玩APP平台如果不解决陪玩师接私单的问题,那么你的陪玩平台一定赚不到钱! 为什么这么说呢?平台花费10万引流来1000个顾客,每个顾客的引流成本就是1 ...

  2. 为什么需要学习ITSM/ITIL

    假如你需要管理一个超过20人的IT服务组织,一般会面临以下问题: 人多事杂活重,每个人都很累,工作却还是一团糟糕, 用户方怨声载道,领导也颇有微词,同事间也经常互相甩锅埋坑, 工作只是救火或者混日子, ...

  3. Linux中的umask

    在Linux中,当创建一个文件或者目录的时候,系统会自动为这个文件或者目录赋予默认的权限,而umask命令就是用来控制这个默认权限的. 查看umask umask的查看有两种方式,一种不带选项-S,一 ...

  4. ajax递归发送请求

    简介 大家都知道浏览器在处理http网络请求的时候,不同的浏览器会有不一样的并发限制,下表是一些主流浏览器对 HTTP 1.1 和 HTTP 1.0 的最大并发连接数目: Browser HTTP/1 ...

  5. selenium 滚动截图参考

    Selenium本身并不直接支持滚动截图,但是你可以通过编程方式实现滚动截图.下面是一个Python的例子,使用Selenium和PIL库实现滚动截图: from selenium import we ...

  6. 『手撕Vue-CLI』添加帮助和版本号

    前言 经过上一篇『手撕Vue-CLI』编码规范检查之后,手撕 Vue-CLI 已经进阶到了代码规范检查这一步,已经将基本的工程搭建好了,然后代码规范约束也已经加入了,并且将 nue-cli 指令绑定到 ...

  7. containerd 源码分析:启动注册流程

    0. 前言 containerd 是一个行业标准的容器运行时,其强调简单性.健壮性和可移植性.本文将从 containerd 的代码结构入手,查看 containerd 的启动注册流程. 1. 启动注 ...

  8. sass @extend(继承)指令详解

    在设计网页的时候常常遇到这种情况:一个元素使用的样式与另一个元素完全相同,但又添加了额外的样式. 通常会在 HTML 中给元素定义两个 class,一个通用样式,一个特殊样式. 普通CSS的实现 接下 ...

  9. sqlerver 报错5120 无法为该请求检索数据 系统找不到指定路径

    背景: 数据库mdf文件所在盘符F盘被删除了,也就是文件不存在了,sqlserver管理器打开就报错5120,并且正常路径的数据库也不显示出来. 要让正常的数据库显示出来,就需要删除掉已经没有的数据库 ...

  10. 为什么下载程序的时候会提示win-amd64.exe