Sql 如何基于动态列添加列

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子句中定义的别名。所以,只要重复你的逻

一个简化问题理解的简单示例,在实际查询中,很难简单地写出“value+20”

示例表

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抱歉,键入:-(