Динамические Псевдонимы в SQL-операторе

Дело обстоит так в Spyder 3.3.2 в Windows также. К сожалению, это - известное поведение в ipdb и не будет разрешено, пока Spyder 4 не выпущен позже в этом году. Для получения дополнительной информации см. официальная проблема о Github.

9
задан OMG Ponies 14 October 2009 в 15:43
поделиться

5 ответов

Я не уверен, можно ли добавлять динамические псевдонимы, но у вас должна быть возможность сделать что-то вроде этого (если у вас есть только несколько возможных псевдонимов):

SELECT
    CASE P.Type WHEN 'Individual' THEN P.Amount ELSE NULL END AS Salary,
    CASE P.Type WHEN 'Individual' THEN NULL ELSE P.Amount END AS Profit
FROM
    Person p
12
ответ дан 4 December 2019 в 13:03
поделиться

Имя «Псевдоним» - это имя всего столбца возвращаемых вами данных. Это невозможно изменить "по строкам".

Единственный способ динамически изменить имя столбца (псевдоним) - это использовать динамический SQL для построения вашего запроса. Однако похоже, что это не то, что вы хотите делать.

2
ответ дан 4 December 2019 в 13:03
поделиться

Нет, не могу ...

SQL возвращает набор записей, который может иметь только одно имя / псевдоним за каждый столбец .
Какое имя он выбрал бы, например, если бы некоторые записи, возвращаемые запросом, были «Индивидуальными», а некоторые - другого типа?

Конечно, как было предложено в нескольких ответах, вы можете изменить количество столбцов, возвращаемых запросом и назовите каждый столбец по своему усмотрению, но имея дело с таким набором результатов, который может потребовать дополнительной логики, что приведет к поражению цели, поскольку, если кому-то нужна дополнительная логика, он / она может просто выбрать как количество, так и тип и отработать эти значения для атрибута именование и тому подобное на уровне приложения ...

1
ответ дан 4 December 2019 в 13:03
поделиться

Вам нужно будет вернуть Amount как "Amount", а затем вернуть дополнительный столбец, содержащий "type" для этой суммы.

ieg

SELECT P.Amount, CASE P.Type WHEN 'Individual' THEN 'Salary' ELSE 'Profit' END AS AmountType
FROM Person P
1
ответ дан 4 December 2019 в 13:03
поделиться

У столбца может быть одно и только одно имя. Если ваш набор строк содержит только одну строку, вы можете сначала просмотреть столбец типа строки, а затем изменить имя столбца, соответствующее выбранному. Если он содержит несколько строк, это просто невозможно.

IF 1 = (SELECT COUNT(*) FROM Person P WHERE <where-criteria>) THEN
    IF 'Individual' = (SELECT P.Type FROM Person P WHERE <where-criteria>) THEN
        SELECT P.Amount AS Salary
        FROM Person P
        WHERE <where-criteria>
    ELSE
        SELECT P.Amount AS Profit
        FROM Person P
        WHERE <where-criteria>
    END IF
ELSE
    SELECT P.Amount AS SalaryOrProfit
    FROM Person P
    WHERE <where-criteria>
END IF

Я думаю, вам, возможно, придется пересмотреть свой дизайн.

0
ответ дан 4 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: