我正在使用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