我希望根据用户对参数的选择在查询中动态命名列。

我的想法是,根据用户的选择,该列将通过列/字段规范后的“As”来命名。

这是我的示例:

Select Distinct

Case @DateParam

When 'Created' Then Convert(Varchar, h.wmhd_cre_date, 101)

When 'Action' Then Convert(Varchar, d.wmdt_date, 101)

End As CONCATENATE(@DateParm + 'Date'),

因此,如果用户选择“创建”日期的参数,则列标题将显示“CreatedDate”。但是,如果他们为“操作”日期选择了参数,则该列将被命名为“ActionDate”。

之前我曾尝试做类似的事情,并且开始意识到您不能在“As”语句之后放置表达式。这是真的吗?还是有人有什么想法?

最佳答案

那是正确的。别名标识符可能无法通过表达式生成。

您可以执行以下操作:

SELECT DISTINCT
  CASE WHEN @DateParam = 'Created' THEN CONVERT(varchar, h.wmhd_cre_date, 101) END AS CreatedDate,
  CASE WHEN @DateParam = 'Action' THEN CONVERT(varchar, h.wmdt_date, 101) END AS ActionDate

如果绝对必须以您描述的原始方式返回列,则需要使用动态sql(例如EXECEXEC sp_executesql)

关于sql - 我可以使用函数/表达式通过T-SQL中的“As”语句来命名列吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4294614/

10-09 20:03
查看更多