我遇到的情况是我正在使用命名列:
SELECT title, SUBSTR(title, 1, 2) as nameprefix FROM employees
现在的问题是,我想添加另一个命名列,并以某种方式引用其中的nameprefix
。这可能吗?基本上我想这样做:
SELECT title, SUBSTR(title, 1, 2) as nameprefix,
(CASE WHEN nameprefix = 'Dr' THEN 'FOUND' ELSE 'NOPE' END) as flag
FROM employees
它抱怨错误:Error: no such column: nameprefix
。实际的用例涉及复杂的子查询,我希望能够重复使用他们的结果,而不是在每个需要结果的列中复制这些子查询。
答案 0 :(得分:1)
这是可能的:
select title, nameprefix from
(
select title, SUBSTR(title, 1, 2) as nameprefix FROM employees
)
where nameprefix = 'Dr'
答案 1 :(得分:0)
您可以在选择中使用别名,您必须重复代码
SELECT title, SUBSTR(title, 1, 2) as nameprefix,
CASE WHEN SUBSTR(title, 1, 2)= 'Dr' THEN 'FOUND' ELSE 'NOPE' END as flag
FROM employees
使用子选择,例如:in join
SELECT title, t.nameprefix ,
CASE WHEN nameprefix = 'Dr' THEN 'FOUND' ELSE 'NOPE' END as flag
FROM employees
JOIN (select id, SUBSTR(title, 1, 2) as nameprefix
FROM employees ) t on t.id = employees.id
答案 2 :(得分:0)
听起来您希望查看该表,好像title
字段的前两个字符被视为一个单独的命名列。因此,我使用CREATE VIEW
来构建该视图,然后对其进行查询,而不是针对基础表。
因此,在您的情况下,发出类似
的内容CREATE VIEW EmployeesWithCols (Name, Title, NamePrefix) AS
SELECT Name, Title, SUBSTR(title, 1, 2) FROM Employee
现在,只需使用employee
替换原始查询中的表格employeeswithcols
,您就会神奇地拥有一个新的NamePrefix
列。当然,您在视图中可能还需要一些额外的列。
作为旁注,我通常将视图命名为仅用于将虚拟计算列添加到具有表名和前缀的单个表中的视图" Ex" (根据许多内部Windows功能)但在这种情况下以及许多其他情况下,如果您对编写视图名称的字母大小写不严谨,则命名约定已经成熟,可能会令人尴尬。