【问题标题】:dynamic alias in T-SQL queryT-SQL 查询中的动态别名
【发布时间】:2015-04-08 17:30:14
【问题描述】:

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

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

提前非常感谢!

向尼尔斯打招呼

【问题讨论】:

  • 你要列名作为收入吗
  • 不,我只想让它说例如“REVENUE2014”,并希望该列明年说“REVENUE2015”。
  • 请在您的问题中给出预期的输出
  • 我认为你必须使用动态sql来实现你想要的,除非你可以通过其他方式解决你原来的问题
  • 另外,如果这被输入到其他东西(几乎所有查询都是),例如报告工具或应用程序,执行重命名 there 可能比尝试更容易在 SQL 中执行。

标签: sql sql-server tsql


【解决方案1】:
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 查询中不可能做到这一点。所以只能这样。

【讨论】:

  • 谢谢 Dmitrij,我可以在 Views 中写动态 SQL,我想在我的 View 中有动态别名,因为我的视图被记者使用。
  • 不,您不能拥有动态视图。通常报告工具本身可以透视数据,因此您可以在那里实现该逻辑
猜你喜欢
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多