Sql 如何基于动态列添加列
一个简化问题理解的简单示例,在实际查询中,很难简单地写出“value+20” 示例表Sql 如何基于动态列添加列,sql,postgresql,Sql,Postgresql,一个简化问题理解的简单示例,在实际查询中,很难简单地写出“value+20” 示例表 id | value | ------------- 1 | 20 | 2 | 30 | 查询示例: SELECT id, value, value + 10 as value1, value1 + 10 as value2 FROM table; 错误:错误:列“value1”不存在 有什么方法可以使此查询正常工作吗?您不能在同一子句中使用SELECT子句中定义的别名。所以,只要重复你的逻
id | value |
-------------
1 | 20 |
2 | 30 |
查询示例:
SELECT id, value, value + 10 as value1, value1 + 10 as value2
FROM table;
错误:错误:列“value1”不存在
有什么方法可以使此查询正常工作吗?您不能在同一子句中使用
SELECT
子句中定义的别名。所以,只要重复你的逻辑:
SELECT
id,
value,
value + 10 AS value1,
value + 20 AS value2
FROM table;
我不知道这个查询是否代表了您的实际问题,或者它是否是一个简化。如果在select中有一个复杂的表达式,并且确实不想重复它,则可以进行子查询:
WITH cte AS (
SELECT id, value, value + 10 AS value1
FROM table
)
SELECT *, value1 + 10 AS value2
FROM cte;
不能在同一子句中使用
SELECT
子句中定义的别名。所以,只要重复你的逻辑:
SELECT
id,
value,
value + 10 AS value1,
value + 20 AS value2
FROM table;
我不知道这个查询是否代表了您的实际问题,或者它是否是一个简化。如果在select中有一个复杂的表达式,并且确实不想重复它,则可以进行子查询:
WITH cte AS (
SELECT id, value, value + 10 AS value1
FROM table
)
SELECT *, value1 + 10 AS value2
FROM cte;
这篇评论太长了 您不能在相同的
select
、where
或from
子句中再次使用select
中定义的别名(许多数据库将其扩展到分组依据
和拥有
)
这是SQL中的规则。您可能想知道为什么,但这里有一个关于
select
的简单解释。请记住,SQL是围绕集合定义的,集合没有顺序。SQL不能保证表达式在select
中的求值顺序。如果没有这一保证,引擎就不知道先评估哪一个。这太长了,无法发表评论
您不能在相同的select
、where
或from
子句中再次使用select
中定义的别名(许多数据库将其扩展到分组依据
和拥有
)
这是SQL中的规则。您可能想知道为什么,但这里有一个关于
select
的简单解释。请记住,SQL是围绕集合定义的,集合没有顺序。SQL不能保证表达式在select
中的求值顺序。如果没有该保证,引擎将不知道将首先评估哪一个。为什么不将值+20作为[value2]?为什么不将值+20作为[value2]?@RaymondNijland抱歉,键入:-(@RaymondNijland抱歉,键入:-(