J'utilise la commande CASE
pour simplement modifier un résultat de requête de sous-chaîne d'un nombre à un nom. Les choses semblent bien fonctionner mais j'ai du mal à comprendre pourquoi les résultats affichent uniquement la première valeur de la chaîne.La fonction CASE de SQL Server ne renvoie que la première valeur dans la chaîne
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%'
Lorsque le code est exécuté, il crée une colonne intitulée Manual Overrides
qui est correct, en ce que la colonne elle affiche la première valeur dans la chaîne. Mais, où sont les résultats pour les quatre autres valeurs dans la chaîne. Toute aide ou idée serait grandement appréciée.
Merci.
CASE n'est pas une instruction, c'est une expression qui retourne une seule valeur. Il ne renverra jamais 2 valeurs ou plus à partir de votre chaîne. Pouvez-vous afficher une version simplifiée de vos données et les résultats souhaités? –
Pourquoi ne pas créer une table ManualOverrides pour ne pas avoir à modifier cette requête chaque fois que vous en obtenez une nouvelle? – Bert
Auriez-vous besoin des valeurs concaténées sur la même ligne ou sur quatre lignes différentes? – Lamak