Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 交叉联接以获取特定年份特定月份的所有季度末月份_Sql_Teradata - Fatal编程技术网

Sql 交叉联接以获取特定年份特定月份的所有季度末月份

Sql 交叉联接以获取特定年份特定月份的所有季度末月份,sql,teradata,Sql,Teradata,我试图编写逻辑代码以获得低于输出的结果,但没有成功。我的头脑 现在运行空白。你能和我分享你的想法吗?我相信我们在一起 可以找出SQL中一些最简单的解决方案来获得以下信息 输出 添加更多,我不想要Q4键。 请注意,该表是一个月维度,包含的列很少,例如 Prev01,02。。。月份键 使用SQLServer和Teradata标记,我只关心逻辑,而不关心语法。我正在使用Teradata 现有数据: 预期产出: 因此,一年的总预期记录为12*3=36 编辑:我们每年都有估算值和预算值。例如 2016年的

我试图编写逻辑代码以获得低于输出的结果,但没有成功。我的头脑 现在运行空白。你能和我分享你的想法吗?我相信我们在一起 可以找出SQL中一些最简单的解决方案来获得以下信息 输出

添加更多,我不想要Q4键。 请注意,该表是一个月维度,包含的列很少,例如 Prev01,02。。。月份键

使用SQLServer和Teradata标记,我只关心逻辑,而不关心语法。我正在使用Teradata

现有数据:

预期产出:

因此,一年的总预期记录为12*3=36

编辑:我们每年都有估算值和预算值。例如

2016年的估计值将来自2016年3月至2016年第一季度、2016年6月至2016年第二季度、2016年9月至第三季度。一个预算值为2015年12月至第4季度。 因此,从2016年开始的任何一个月都会有相同的预算估计值。只有当年份发生变化时,这一点才会改变。我希望现在一切都清楚了

不幸的是,我将无法共享表DDL或示例数据。所以尽量简单地解释这个场景。我能够编写SQL代码来获取预算值,但对于估算值来说,场景有点棘手。假设2016年4月,我想要的估计值是2016年3月、2016年6月、2016年9月。 现有数据是与示例数据类似的屏幕截图


添加更多,月份键就像一个标识列。2017年1月的月份键为13等等…

在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)
给你

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

看起来,季度末包含从1月开始的月数。请将相关表DDL语句和样本数据作为DML共享。您在这里已经有一段时间了,您现在应该知道共享代码比共享图像更好。您实际上想要什么还不清楚。我们不知道你为什么把一月和三月、六月和九月放在一起。为什么不以八月为例呢?这里有适用的规则吗?然后是列quarter_start和quarter_end,它们的值似乎没有多大意义。在表中,它似乎只是一个月居住的年度季度数。在结果中,它似乎是加入月份的编号或加入月份的月份键。我不知道是哪个。很难说结果是显示月份数字还是月份键,因为您只显示2016年的表格数据。从您的表格中还可以看到2015年和2017年的记录。还是只包含2016年?如果是这样,为什么它会包含一个年份列呢?我删除了sql server标记,因为您显然没有使用它。另外,请阅读:谢谢。一些帮助我建立自己的东西!谢谢你的回答。但这是非常具体的样本数据提供。我需要一个通用的解决方案: