2017-01-03 89 views
-2

我試圖編寫邏輯以獲得低於輸出但未成功。我的頭腦 現在空白。你能和我分享你的想法嗎?我確定我們一起 可以找出一些SQL中最簡單的解決方案,以獲得以下 輸出。交叉加入以獲得特定月份在特定年份的所有季度末月份

添加更多,我不想Q4鍵。 請注意,表格是包含更多列的月份維度,例如 Prev01,02 ...個月份的鍵。

標籤爲SQL Server & Teradata以及我關心的邏輯只有&不是語法。我正在使用Teradata。

現有數據:

enter image description here

預期輸出:

enter image description here

一年總那麼預期的記錄將是12 * 3 = 36

編輯:對於每一年,我們估計&預算值。例如。

2016年,估算值將來自2016年3月(Q1),2016年6月(Q2),2016年9月(Q3)。還有一個預算值將從2015年12月(Q4)開始。 因此,2016年的任何一個月都會有相同的預算估算值。這隻會在年份發生變化時纔會改變。我希望現在很清楚......

不幸的是,我不能共享表DDL或示例數據。所以試圖儘可能簡單地解釋場景。我能夠編寫SQL來獲得預算值,但對於估計,情況有點棘手。因此,讓我們說2016年4月,我想要的估算值是2016年3月,2016年6月,2016年9月。 現有數據是一個類似於樣本數據的截圖。

添加更多,月份密鑰就像一個標識列。一月至2017年將有一個月鍵13 &等等...

+1

看起來,'Quarter_End'包含來自JAN **的月數**。 – Vikrant

+2

請分享相關表格DDL語句和樣本數據作爲DML。你在這裏已經有一段時間了,現在你應該知道分享代碼和圖像更好。 –

+0

目前還不清楚你實際需要什麼。我們不知道爲什麼你會在一月,三月,六月和九月。爲什麼不與8月例如?這裏有適用的規則嗎?然後有列quarter_start和quarter_end,其價值似乎沒有多大意義。在表中,它似乎只是一個月每年季度的數字。在結果中,它似乎是連接月份的月份數或month_key。我不知道哪個。 –

回答

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 
+0

謝謝。幫助我建立自己的東西! – Aditya

+0

歡迎您,很高興知道 – MtwStark

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) 
+0

謝謝你的回答。但是,這對於提供的樣本數據非常具體。我需要一個通用的解決方案:) – Aditya

相關問題