T-SQL查询中的动态别名

T-SQL查询中的动态别名,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在查询中遇到了一个问题,即为字段生成别名,例如,该别名会为我提供去年和前年的收入。我的理解是,我可以做如下事情: SELECT 1234 AS 'REVENUE' + CAST (year(DATEADD(year,-1,getdate())) AS VARCHAR(20)) 4321 AS 'REVENUE' + CAST (year(DATEADD(year,-2,getdate())) AS VARCHAR(20)) 但这不起作用。有人知道怎么做吗 我想要一张这样的桌

我在查询中遇到了一个问题,即为字段生成别名,例如,该别名会为我提供去年和前年的收入。我的理解是,我可以做如下事情:

SELECT 
    1234 AS 'REVENUE' + CAST (year(DATEADD(year,-1,getdate())) AS VARCHAR(20))
    4321 AS 'REVENUE' + CAST (year(DATEADD(year,-2,getdate())) AS VARCHAR(20))
但这不起作用。有人知道怎么做吗

我想要一张这样的桌子

rownr|revenue2014|revenue2013
-----------------------------
1    |1234       |4321
提前多谢

尼尔斯问候

DECLARE @sql VARCHAR(1000);
SET @sql = 'SELECT 
    1234 AS REVENUE' + CAST (year(DATEADD(year,-1,getdate())) AS VARCHAR(20)) + ',
    4321 AS REVENUE' + CAST (year(DATEADD(year,-2,getdate())) AS VARCHAR(20))
PRINT @sql
EXEC (@sql)
在静态SQL查询中不可能做到这一点。所以只有这样


在静态SQL查询中不可能做到这一点。所以只有这样。

你想让列名为revenueno我只想让它说,例如“REVENUE2014”,并希望该列明年说“REVENUE2015”。请在你的问题中给出预期的结果。我认为你必须使用动态sql来实现你想要的,除非你还可以用其他方法解决你原来的问题,如果这是输入到其他东西(几乎所有查询都是)中,例如报告工具或应用程序,那么在那里执行重命名可能比在SQL中尝试重命名要容易得多。是否希望列名为revenueno我只希望它说“REVENUE2014”,并希望该列说“REVENUE2015”明年。请在你的问题中给出预期的结果。我认为你必须使用动态sql来实现你想要的,除非你能以其他方式解决你原来的问题。同样,如果这被输入到其他东西(几乎所有的查询)中,例如报告工具或应用程序,在那里执行重命名可能比尝试在SQL中执行重命名要容易得多。感谢Dmitrij,我可以在视图中编写dynamics SQL吗?我希望在视图中使用dynamics alias,因为我的视图由Reporter使用。不,您不能使用动态视图。通常报表工具本身可以透视数据,因此您可以实现该逻辑感谢Dmitrij,我可以在视图中编写dynamics SQL吗,我想在视图中使用dynamics alias,因为我的视图由报表使用。不,您不能有动态视图。通常报表工具本身可以透视数据,因此您可以在那里实现该逻辑