2013-12-05 3 views
0

У меня есть запрос INSERT INTO, и у меня есть операторы CASE, которые определяют многие значения полей. В следующем, однако, все тестовые утверждения одинаковы, есть ли способ консолидировать это?Запрос INSERT с CASES, что все используют одну и ту же тестовую инструкцию

field1 = CASE WHEN IID <> '\' THEN IID ELSE '' END 
field2 = CASE WHEN IID <> '\' THEN Left(IID, (InStrRev(IID, '\') - 1)) 
     ELSE '' END 
field3 = CASE WHEN IID <> '\' THEN Right(IID, (Len(IID) - InStrRev(IID, '\'))) 
+0

Если 'InStrRev' делает то, что, как мне кажется, вам нужно оставить CASE только для' field1'. Для остальных двух CASEs не должны иметь эффекта, т. Е. Вы могли бы просто иметь поле field2 = Left (...), field3 = Right (...) '. –

ответ

0

CASEявляется выражением (не утверждение), который возвращает единственное значение. Я не могу придумать никакой возможности для консолидации здесь, кроме как упростить выражение, которое вы проверяете. Например, вы можете использовать подзапрос или CTE:

;WITH x AS 
(
    SELECT x = CASE WHEN IID <> '\' THEN 1 ELSE 0 END, other columns 
    FROM dbo.table 
) 
INSERT INTO ... 
SELECT column1 = CASE x WHEN 1 THEN IID ELSE '' END, 
     column2 = CASE x WHEN 1 THEN LEFT ... 
...etc 
FROM x;