Может ли SQL использовать вычисляемые значения в качестве псевдонимов

Я пытаюсь выяснить, как использовать вычисляемое значение как часть псевдонима.

Например:

Выберите employeeName как «имя парня», но где «имя парня» может быть getdate () + «имя парня». Квалификаторы надстройки просто предотвращают вычисление кода внутри.

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


person Aaron Gibson    schedule 27.08.2013    source источник
comment
Вам нужно использовать динамический SQL, чтобы иметь такие имена переменных. То есть вам нужно создать SQL в виде строки, а затем выполнить его.   -  person Gordon Linoff    schedule 27.08.2013
comment
Я так не думаю. Для любого запроса, возвращающего более одной строки, могут возникнуть проблемы неоднозначности.   -  person Dan Bracuk    schedule 27.08.2013


Ответы (2)


Я не знаю, если это то, что вы ищете, но это может быть хорошим началом:

DECLARE @var table(rownum int, rowkey varchar(60), ALIAS varchar(80))
INSERT INTO @var SELECT row_number() over (ORDER BY employeeName), employeeName, cast(getdate() AS varchar(12))+employeeName FROM Table1
DECLARE @query varchar(500)
DECLARE @rowkey varchar(60), @i int, @max int
SET @i = 1
SET @max = (SELECT count(*) FROM @var)
SET @query = ''
WHILE @i <= @max
BEGIN
    SET @rowkey = (SELECT rowkey FROM @var WHERE rownum = @i)
    SET @query = 'select employeeName as "'+(SELECT ALIAS FROM @var WHERE rowkey = @rowkey)+'" from Table1 where employeeName = '''+@rowkey+''';'
    exec(@query)
    SET @i = @i + 1
END;
person Fabien TheSolution    schedule 27.08.2013

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

person Mentatmatt    schedule 27.08.2013