业务逻辑:有一个仪器 用来检测温度和压力值 ,如果这个值超出一定范围就会报警,范围如下
温度限制范围 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