我尝试编写逻辑以获得低于输出但没有成功。我脑海 现在空白。你能和我分享你的想法吗?我相信我们在一起 可以找出SQL中的一些最简单的解决方案来获得以下内容 输出。
添加更多,我不想要Q4键。 请注意,该表是Month维度,包含更多列,例如a Prev01,02 ...月份键。
标记为SQL Server& Teradata以及我只关注逻辑和&不是语法。我正在使用Teradata。
现有数据:
预期输出:
因此,一年的总预期记录为12 * 3 = 36。
编辑:对于每一年,我们都有估计&预算值。对于前。
2016年,估计值将来自2016年3月至2016年(2016年6月)(2016年6月)(第3季度)。一个预算值将从2015年12月(第四季度)开始。 因此,2016年的任何一个月都将具有相同的预算估算值。这只会在年份发生变化时发生变化。我希望现在很清楚......
不幸的是,我无法共享表格DDL或样本数据。所以试图尽可能简单地解释这个场景。我能够编写SQL来获取预算值,但对于估算,情况有点棘手。因此,假设2016年4月,我想要的估计值是2016年3月,2016年6月,2016年9月。 现有数据是类似于样本数据的屏幕截图。
添加更多月份密钥就像一个标识列。 2017年1月的月份密钥为13&等......
答案 0 :(得分:1)
在MSSQL中,我们可以这样做:
declare @temp table (month_key int,Months varchar(100),Years int,Quarter_Start int)
insert into @temp values (1 ,'Jan',2016, 1 )
insert into @temp values (2 ,'Feb',2016, 1 )
insert into @temp values (3 ,'Mar',2016, 1 )
insert into @temp values (4 ,'Apr',2016, 2 )
insert into @temp values (5 ,'May',2016, 2 )
insert into @temp values (6 ,'Jun',2016, 2 )
insert into @temp values (7 ,'Jul',2016, 3 )
insert into @temp values (8 ,'Aug',2016, 3 )
insert into @temp values (9 ,'Sep',2016, 3 )
insert into @temp values (10,'Oct',2016, 4 )
insert into @temp values (11,'Nov',2016, 4)
insert into @temp values (12,'Dec',2016, 4)
select 1 as 'Month_Key','Jan' as 'Month',Years,Months+'-16' as 'Scenario',month_key as 'Quarter End' from @temp where month_key in
(select max(month_key) from @temp group by Quarter_Start)
答案 1 :(得分:1)
这里是
select t1.month_key, t1.Month, Year, t3.Month+'-'+right(CAST(Year as varchar(4)),2) Scenario, t2.month_key Quarter_End
from YourData t1
cross join (
select Quarter_Start, MAX(month_key) month_key
from YourData
group by Quarter_Start
) t2
join (
select month_key, Month
from YourData
) t3 on t2.month_key = t3.month_key
where t2.month_key<>12 -- if you do not want last quarter
order by 1,5