2009-10-14 4 views
9

Я хочу отобразить псевдоним на основе значения другого имени столбца в запросе в SQL Server. Напр.Динамические псевдонимы в операторе SQL

SELECT P.Amount AS (CASE P.Type WHEN 'Individual' THEN 'Salary' ELSE 'Profit' END) 
    FROM Person P 

Я знаю, что это неправильно, но что-то в этом роде поможет.

ответ

12

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

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 
+0

+1 Хорошее место, это может на самом деле сделать то, что ему нужно. Не думал об этом. –

+0

Спасибо, это определенно самая близкая сделка, которую я мог получить –

1

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

i.e.g

SELECT P.Amount, CASE P.Type WHEN 'Individual' THEN 'Salary' ELSE 'Profit' END AS AmountType 
FROM Person P 
2

Название «Alias» это имя всего столбца данных, которые вы возвращающиеся. Это невозможно для изменения по принципу «по ряду».

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

+2

И при этом даже динамический SQL сможет выбрать только одно имя для псевдонима для всего заданного запроса. – mjv

1

Нет может сделать ...

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

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

0

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

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 

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

Смежные вопросы