当前位置: 代码迷 >> Sql Server >> sql 累加字段
  详细解决方案

sql 累加字段

热度:54   发布时间:2016-04-24 08:58:53.0
sql 追加字段
业务逻辑:有一个仪器  用来检测温度和压力值 ,如果这个值超出一定范围就会报警,范围如下
温度限制范围   tem  温度严重低限   10    温度低限  20     20~60之间为正常     温度高限60    温度严重高限80      
压力限制范围   pre    压力严重低限  50    压力低限  70     70~100之间为正常     温度高限100   压力严重高限200

仪器记录表  

自增id     仪器编号                温度          压力        采集时间
id           no                    tem           pre         addtime
1           a001                   10            40          2015-07-07 10:01
2           a002                   20            204         2015-07-07 10:02
3           a001                   18            80          2015-07-07 10:03
4           a001                   30            80          2015-07-07 10:04

现在要追加两个字段   不正常记录 (状态 -1  正常 0,报警字段记录报警状况,用逗号隔开)  结果如下:

自增id     仪器编号                温度          压力        采集时间                 状态             报警     
id           no                    tem           pre         addtime                  status           alm             
1           a001                   10            40          2015-07-07 10:01         -1             温度严重低限,压力严重低限 
2           a002                   20            204         2015-07-07 10:02         -1             温度低限,压力严重高限
3           a001                   18            80          2015-07-07 10:03         -1             温度低限  
4           a001                   30            80          2015-07-07 10:04         0              0  


------解决思路----------------------
 --创建临时表
 CREATE TABLE #Temp
 (
 id  INT,
  no   VARCHAR(50),
  tem  INT,
  pre  INT,
   addtime DATETIME
 )
 INSERT INTO #Temp
SELECT 1,' a001',10,40,'2015-07-07 10:01' UNION  ALL
SELECT 2,' a002',20,204,'2015-07-07 10:01' UNION  ALL
SELECT 3,' a001',18,80,'2015-07-07 10:01' UNION  ALL
SELECT 4,' a001',30,80,'2015-07-07 10:01' 
--使用cet
;WITH cet AS (
--现将数据处理
SELECT 
id,
no,
tem,
pre,
addtime,
CASE WHEN tem<=10 THEN '温度严重低限' 
 WHEN tem between 10 and 20THEN '温度低限'
 WHEN tem BETWEEN 20 AND 60 THEN '正常'
 WHEN tem=60 THEN '温度高限'
 WHEN tem>60 THEN '温度严重高限'
  END AS [气温报警], 
CASE WHEN pre <=50 THEN '压力严重低限'
 WHEN pre BETWEEN 50 AND 70 THEN '压力低限'
 WHEN pre BETWEEN 70 AND 100 THEN '正常'
 WHEN pre=100 THEN '温度高限'
 WHEN pre>100 THEN '严重高限'
 END AS [气压报警]
FROM #Temp
)
--在将温度与气压组合起来
SELECT 
id,
no,
tem,
pre,
addtime,
CASE WHEN [气温报警]='正常'and [气压报警]='正常' then 0 else -1  end [status],
[气温报警]+'/'++[气压报警] as [ 报警]
 FROM cet 
  相关解决方案