首先,我已经阅读了类似的帖子,并阅读了评论,这不是一个理想的解决方案,我得到它,但老板(即客户)希望这样。参数如下(由于各种原因太过奇怪但不能相信我): 1. SQL Server Mgmt Studio 2016 2.无参数或通过或临时表。所有都必须在包含的代码内。
所以我们走了:
我需要创建反映日期的列标题:
1. Current date
2. Most recent quarter end prior to current date
3. Most recent quarter end prior to #2
4. Most recent quarter end prior to #3
5. Most recent quarter end prior to #4
6. Most recent quarter end prior to #5
因此,如果使用今天的日期,我的列名将如下
12/18/2016 9/30/2016 6/30/2016 3/31/2016 12/31/2016 9/30/2015
我可以在SAS中轻松完成,但在SQL中不能满足上述要求。
请使用相同的代码帮助。
谢谢
保
答案 0 :(得分:1)
对于真正属于表示层的东西来说,似乎还有很长的路要走。也就是说,请考虑以下因素:
我们假设您为计算字段维护命名约定,例如A *= C
。然后我们可以将复杂的查询包装在一些动态SQL中。
就像插图一样,让我们假设您当前的查询结果如下所示
在" wrap"之后,结果将如下所示:
代码 - 因为您没有排除动态SQL。
A *= A
如果它有助于可视化,则生成的SQL如下:
[CurrentDay], [QtrMinus1], [QtrMinus2], [QtrMinus3], [QtrMinus4],[QtrMinus5]
答案 1 :(得分:0)
以下是使用动态查询的一种方法
DECLARE @prior_quarters INT = 4,
@int INT =1,
@col_list VARCHAR(max)=Quotename(CONVERT(VARCHAR(20), Getdate(), 101))
WHILE @int <= @prior_quarters
BEGIN
SELECT @col_list += Concat(',', Quotename(CONVERT(VARCHAR(20), Eomonth(Getdate(), ( ( ( ( Month(Getdate()) - 1 ) % 3 ) + 1 ) * -1 ) * @int), 101)))
SET @int+=1
END
--SELECT @col_list -- for debugging
EXEC ('select '+@col_list+' from yourtable')