我正在使用CASE
命令将子字符串查询结果从一个数字更改为名称。SQL Server CASE函数仅返回字符串中的第一个值
事情似乎很好,但我很难找出为什么结果只显示字符串的第一个值。
Declare @OverrideON INT, @OverrideOFF INT
SET @OverrideON = 1 SET @OverrideOFF = 0
SELECT LonDeviceName,
CASE WHEN SUBSTRING (PointValue,65,1) = @OverrideON THEN 'Fan In Override'
WHEN SUBSTRING (PointValue,67,1) = @OverrideON THEN 'HW In Override'
WHEN SUBSTRING (PointValue,69,1) = @OverrideON THEN 'CHW In Override'
WHEN SUBSTRING (PointValue,71,1) = @OverrideON THEN 'OAD In Override'
WHEN SUBSTRING (PointValue,73,1) = @OverrideON THEN 'VFD In Override'
WHEN SUBSTRING (PointValue,65,1) = @OverrideOFF THEN 'Fan Normal'
WHEN SUBSTRING (PointValue,67,1) = @OverrideOFF THEN 'HW Normal'
WHEN SUBSTRING (PointValue,69,1) = @OverrideOFF THEN 'CHW Normal'
WHEN SUBSTRING (PointValue,71,1) = @OverrideOFF THEN 'OAD Normal'
WHEN SUBSTRING (PointValue,73,1) = @OverrideOFF THEN 'VFD Normal'
ELSE '**StringError**'
END as 'Manual Overrides'
FROM dbo.Points
WHERE LogicName like '%override%'
当代码运行它创建标题Manual Overrides
列这是正确的,在该列中它显示的字符串中的第一个值。但是,字符串中其他四个值的结果在哪里。任何援助或想法将不胜感激。
谢谢。
CASE不是一个语句,它是一个返回单个值的表达式。它永远不会从你的字符串中返回2个或更多的值。你可以展示一个简化版本的数据和期望的结果吗? – 2012-07-25 20:48:01
为什么不创建ManualOverrides表,以便每次获取新表时不必修改此查询? – Bert 2012-07-25 20:51:40
你需要连接在同一行还是四行不同的值吗? – Lamak 2012-07-25 20:54:05