Как добавить столбец на основе динамического столбца - PullRequest
0 голосов
/ 14 сентября 2018

Пример простого примера, упрощающего понимание вопроса, в реальном запросе будет сложно просто написать «значение + 20».

Пример таблицы

id | value |
-------------
 1 |   20  |
 2 |   30  |

Пример запроса:

SELECT id, value, value + 10 as value1, value1 + 10 as value2
FROM table;

Ошибка: ОШИБКА: столбец "значение1" не существует

Можно ли как-нибудь заставить этот запрос работать?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Это слишком долго для комментария.

Вы не можете снова использовать псевдонимы, определенные в select в тех же предложениях select, where или from (и многие базы данных расширяют их до group by и having).

Это правило в SQL. Вы можете спросить, почему, но вот простое объяснение select. Помните, что SQL определяется вокруг множеств, которые не имеют порядка. SQL просто не гарантирует порядок вычисления выражений в select. Без этой гарантии двигатель не знает, что будет оцениваться первым.

0 голосов
/ 14 сентября 2018

Вы не можете использовать псевдоним, определенный в предложении SELECT в том же предложении.Итак, просто повторите вашу логику:

SELECT
    id,
    value,
    value + 10 AS value1,
    value + 20 AS value2
FROM table;

Я не знаю, представляет ли этот запрос вашу реальную проблему, или это будет упрощение.Если у вас было сложное выражение в выделении, и вы действительно не хотели его повторять, тогда вы можете выполнить подзапрос:

WITH cte AS (
    SELECT id, value, value + 10 AS value1
    FROM table
)

SELECT *, value1 + 10 AS value2
FROM cte;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...