2017-02-22 33 views
1

Итак, Я пытаюсь написать запрос с оператором case. У меня возникают проблемы с выдачей моего оператора case как нескольких переменных. В принципе, я хочу взять 1 столбец и выставить первую часть как outputcolumn1 «FIRST» и последние 4 cahracters как outputcolumn2 «LAST»SQL, возвращающий несколько переменных

Я попытался сделать некоторые исследования, но я не нахожу ничего, чтобы обратиться к моему вкусу ... Я знаю, что упускаю из виду что-то действительно немое.

Select * 
Case When a.col_1 is NULL 
-- Grab all but last 4 as "FIRST" 
Then LEFT(b.col_1, len(b.col_1) -4 
-- Grab Last 4 as "LAST" 
AND RIGHT(b.col_1, 4) 
Else LEFT(a.col_1, len(a.col_1) -4 
AND RIGHT(a.col_1, 4) 

end as FIRST,LAST 

From Table_1 as a 
inner join Table_2 as b on a.TableID = b.TableID 

ответ

5

Во-первых, есть недостающий право скобки здесь: LEFT(b.col_1, len(b.col_1) -4

Во-вторых, вы не можете вернуть два столбца, используйте два заявления регистра.

SELECT *, 
     CASE WHEN a.col_1 IS NULL 
      THEN LEFT(b.col_1, LEN(b.col_1) -4) 
      ELSE LEFT(a.col_1, LEN(a.col_1) -4) 
     END AS FIRST, 
     CASE WHEN a.col_1 IS NULL 
      THEN RIGHT(b.col_1, 4) 
      ELSE RIGHT(a.col_1, 4) 
     END AS LAST 
FROM Table_1 AS a 
INNER JOIN Table_2 AS b 
ON a.TableID = b.TableID 

Я хотел бы предложить вам еще один синтаксис:

SELECT *, 
     COALESCE(LEFT(a.col_1, LEN(a.col_1) - 4), LEFT(b.col_1, LEN(b.col_1) - 4)) AS FIRST, 
     COALESCE(RIGHT(b.col_1, 4), RIGHT(a.col_1, 4)) AS LAST 
FROM Table_1 AS a 
INNER JOIN Table_2 AS b 
ON a.TableID = b.TableID 
+0

Я начал гнездиться заявления Случае, как вы здесь, но знал, что я до сих пор что-то отсутствует. Благодаря! – UPGRAYEDD

+0

Я рад, что смог помочь. – McNets