Вот проблема, которая, кажется, должна быть проста, но я некоторое время работал над ней и не могу понять, почему я не могу объединить CASE в одной области запроса и IF в другой.
Кто-нибудь видит, что здесь происходит? У меня есть старый набор данных, который необходимо преобразовать для работы с новыми таблицами. Данные извлекаются из WDDX и помещаются во временную таблицу. Это все работает правильно.
Вот тут у меня проблемы. Мне нужно извлечь значение в новый столбец с именем DetailValue, когда появляется XXXX, и в таких случаях значение, появляющееся после XXXX, представляет собой число, которое принадлежит DetailValue, затем следует _, и в этом случае число, появляющееся после _ принадлежит RiskValue. Кроме того, при появлении ZZZZ в DetailValue появляется следующий символ, который всегда является последним.
Когда это просто CASE, все работает нормально, но когда я добавляю IF, чтобы получить значение, он говорит мне:
"Неверный синтаксис рядом с ключевым словом« IF ». Msg 156 , Уровень 15, Состояние 1, Процедура OldSysDataConv Неверный синтаксис рядом с ключевым словом 'THEN'.
Код:
SELECT VarName,
CASE
WHEN (CHARINDEX('XXXX', VarName) > 0 and SUBSTRING(VarName, CHARINDEX('XXXX', VarName), len(VarName)) like '%XXXX%') or SUBSTRING(VarName, CHARINDEX('ZZZZ', VarName), len(VarName)) like '%ZZZZ%' then
left(replace(left(replace(VarName, 'XXXX', ''), len(VarName)-4), 'ZZZZ', ''), (len(VarName)-5))
else
null
END as DetailName,
IF CHARINDEX('ZZZZ', VarName) > 0 THEN
right(VarName, 1)
END
as DetailValue,