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  就行了。

 

posted @ 2022-07-06 17:34  宁静致远·TJ  阅读(379)  评论(0编辑  收藏  举报