Дело обстоит так в Spyder 3.3.2 в Windows также. К сожалению, это - известное поведение в ipdb и не будет разрешено, пока Spyder 4 не выпущен позже в этом году. Для получения дополнительной информации см. официальная проблема о Github.
Я не уверен, можно ли добавлять динамические псевдонимы, но у вас должна быть возможность сделать что-то вроде этого (если у вас есть только несколько возможных псевдонимов):
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
Имя «Псевдоним» - это имя всего столбца возвращаемых вами данных. Это невозможно изменить "по строкам".
Единственный способ динамически изменить имя столбца (псевдоним) - это использовать динамический SQL для построения вашего запроса. Однако похоже, что это не то, что вы хотите делать.
Нет, не могу ...
SQL возвращает набор записей, который может иметь только одно имя / псевдоним за каждый столбец .
Какое имя он выбрал бы, например, если бы некоторые записи, возвращаемые запросом, были «Индивидуальными», а некоторые - другого типа?
Конечно, как было предложено в нескольких ответах, вы можете изменить количество столбцов, возвращаемых запросом и назовите каждый столбец по своему усмотрению, но имея дело с таким набором результатов, который может потребовать дополнительной логики, что приведет к поражению цели, поскольку, если кому-то нужна дополнительная логика, он / она может просто выбрать как количество, так и тип и отработать эти значения для атрибута именование и тому подобное на уровне приложения ...
Вам нужно будет вернуть Amount как "Amount", а затем вернуть дополнительный столбец, содержащий "type" для этой суммы.
ieg
SELECT P.Amount, CASE P.Type WHEN 'Individual' THEN 'Salary' ELSE 'Profit' END AS AmountType
FROM Person P
У столбца может быть одно и только одно имя. Если ваш набор строк содержит только одну строку, вы можете сначала просмотреть столбец типа строки, а затем изменить имя столбца, соответствующее выбранному. Если он содержит несколько строк, это просто невозможно.
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
Я думаю, вам, возможно, придется пересмотреть свой дизайн.