2017-02-22 97 views
1

因此, 我想写一个case语句的查询。我有问题输出我的case语句作为多个变量。基本上我想采取1列,并把第一部分作为outputcolumn1“FIRST”和最后4个字符作为outputcolumn2“最后”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

其次,你不能返回两列,使用两个case语句。

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

我开始嵌套case语句就像你在这里,但我知道我还是失去了一些东西。谢谢! – UPGRAYEDD

+0

我很高兴能够提供帮助。 – McNets