我正在尝试创建一个列,其值以SELECT语句中的上一列为条件。首先,第3列将导致字符串从“ Case 01”到“ Case 02”,并且也是CASE语句。
CREATE VIEW name AS(
SELECT column1, column2, colum 3,
CASE
WHEN SUBSTRING(column3,1,6) = 'Case 01' THEN ...
WHEN SUBSTRING(column3,1,6) = 'Case 02' THEN ...
WHEN SUBSTRING(column3,1,6) = 'Case 03' THEN ...
END AS column4
FROM random_table
基本上,将基于column3的值创建column4。这是可能的,因为还没有“构建” VIEW?
谢谢
答案 0 :(得分:1)
首先,在您的示例中,column3
是表中的一列,因此可以在后续表达式中使用它:
CREATE VIEW name AS
SELECT column1, column2, column3,
(CASE WHEN SUBSTRING(column3, 1, 6) = 'Case 01' THEN ...
WHEN SUBSTRING(column3, 1, 6) = 'Case 02' THEN ...
WHEN SUBSTRING(column3, 1, 6) = 'Case 03' THEN ...
. . .
END) AS column4
FROM random_table;
请注意,子查询周围的括号不是必需的。
如果您要为该列分配别名,则可以使用calculated
关键字:
CREATE VIEW name AS
SELECT column1, column2, column3 as col3,
(CASE WHEN SUBSTRING(calculated col3, 1, 6) = 'Case 01' THEN ...
WHEN SUBSTRING(calculated col3, 1, 6) = 'Case 02' THEN ...
WHEN SUBSTRING(calculated col3, 1, 6) = 'Case 03' THEN ...
. . .
END) AS column4
FROM random_table;
calculated
是proc sql
的扩展名。我不知道任何其他支持它的数据库。
替代方法是使用子查询或CTE。
答案 1 :(得分:0)
从您的案例陈述中选择:
CREATE VIEW name AS(
select column1, column2, column3, column4,
case column4
when ... then ...
end as column5
from
(
SELECT column1, column2, colum 3,
CASE
WHEN SUBSTRING(column3,1,6) = 'Case 01' THEN ...
WHEN SUBSTRING(column3,1,6) = 'Case 02' THEN ...
WHEN SUBSTRING(column3,1,6) = 'Case 03' THEN ...
END AS column4
FROM random_table ) t1
答案 2 :(得分:0)
是的,但是您需要嵌套:-
CREATE VIEW name AS(
Select column1, colum2, column 3, Case WHEN column3="Case 1" then... END as column 4
from (
SELECT column1, column2, CASE
WHEN columnn2 = 'x' then 'Case 1 End as column2
FROM random_table) aa
)
答案 3 :(得分:0)
另一个选项是CROSS APPLY
CREATE VIEW name AS
SELECT column1, column2, column3, column4, column5
FROM random_table t1
CROSS APPLY (
SELECT CASE ... <expression depdending on column1, column2, column3> .. END column4 ) t2
CROSS APPLY (
SELECT CASE ... <expression depdending on column1,..column4> .. END column5) t3
快速演示
WITH tbl1 AS
(
SELECT * FROM (VALUES (1),(3))tt(col1)
)
, tbl2 AS
(
SELECT * FROM (VALUES (1),(2))tt(col1)
)
SELECT t1.col1, t2.col1, col2, col3
FROM tbl1 t1
FULL JOIN tbl2 t2 ON t1.col1=t2.col1
CROSS APPLY (
SELECT isnull(t1.col1,100) + isnull(t2.col1,100) col2
) tt
CROSS APPLY (
SELECT col2*col2 col3
) ttt
结果
col1 col1 col2 col3
1 1 2 4
NULL 2 102 10404
3 NULL 103 10609