SQL返回多个变量

UPG*_*EDD 1 sql case

我正在尝试用case语句编写查询.我在将case语句输出为多个变量时遇到问题.基本上我想取1列,然后将第一部分作为outputcolumn1"FIRST",将最后4个字符作为outputcolumn2"LAST"

我尝试做一些研究,但我没有找到任何解决我的味道...我知道我忽略了一些非常愚蠢的东西.

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
Run Code Online (Sandbox Code Playgroud)

McN*_*ets 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
Run Code Online (Sandbox Code Playgroud)

我会建议你另一种语法:

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
Run Code Online (Sandbox Code Playgroud)