SqlServer 使用 case when 实现行转列,并创建视图表查询
其实是个很简单的操作了,但长时间不用有点忘记了,正好项目上遇到这样的需求便把过程记录了下来。
一 需求描述
将河道水情表 结构如下,现在需要将水位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 就行了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术