【问题标题】:Dynamically name a column based on a WHERE condition根据 WHERE 条件动态命名列
【发布时间】:2019-07-12 08:55:27
【问题描述】:

目标:

我每周运行一次查询,并希望我的专栏中的一个返回带有前缀“W”的ISO_WEEK 号码。例如:W1。

更具体地说,我想将以下条件复制到列名中。

DATEPART(ISO_WEEK, table.login) = DATEPART(ISO_WEEK,GETDATE())-2

主要查询是:

 SELECT 
     CAST(t.log_time as Date)           AS Week1
    ,DATEPART(ISO_WEEK,t.log_time)      AS Week_Number -- Dynamically named with ISO_WEEK
    ,email                              AS Emails
 FROM table.memberlog as t
 WHERE 1=1
    AND DATEPART(ISO_WEEK, t.log_time) = DATEPART(ISO_WEEK,GETDATE())-2
    AND DATEPART(YEAR, t.log_time) = DATEPART(YEAR,GETDATE())

【问题讨论】:

标签: sql sql-server tsql dynamic


【解决方案1】:

SQL Server 在设计上是声明性的,不支持宏替换。这样就可以使用动态 SQL,例如 ...

Declare @SQL varchar(max) = '
SELECT 
     CAST(t.log_time as Date)           AS Week1
    ,DATEPART(ISO_WEEK,t.log_time)      AS '+concat('W',DATEPART(ISO_WEEK,GETDATE())-2)+'
    ,email                              AS Emails
 FROM table.memberlog as t
 WHERE 1=1
    AND DATEPART(ISO_WEEK, t.log_time) = DATEPART(ISO_WEEK,GETDATE())-2
    AND DATEPART(YEAR, t.log_time) = DATEPART(YEAR,GETDATE())
'

Exec(@SQL)

【讨论】:

  • 所以要运行我的查询,它需要在 DECLARE 语句中?
  • 如果您希望动态更改列名,那么可以。
猜你喜欢
  • 2021-04-23
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 2019-03-28
  • 2022-11-30
  • 2014-10-25
  • 2017-08-15
  • 1970-01-01
相关资源
最近更新 更多