我正在尝试用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)
首先,这里有一个缺少右括号: 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)
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |