2017-05-25 100 views
0

我有一個表名Prv_Data,其中包含上個月的報告,具有Report_Id和Timeline列。根據當前月份創建上個月的數據

Prv_Data - >
Report_ID | Timeline ---------------|-------------- 01 | Weekly @Mon 01 | Weekly @Mon 01 | Weekly @Mon 01 | Weekly @Mon 02 | Weekly @Thru 02 | Weekly @Thru 02 | Weekly @Thru 02 | Weekly @Thru 02 | Weekly @Thru

我還有一個表名作爲Cur_Month包含當月細節。

Cur_Month - >
Details | Count --------------|-------- First Date | 05/01/2017 Last Date | 05/31/2017 Friday | 4 Monday | 5 Saturday | 4 Sunday | 4 Thursday | 4 Tuesday | 5 Wednesday | 5

現在我想打一個表名作爲Cur_Data包含報告細節,但根據當月工作日數,是指在上週一的月數是4和計數星期四是5,這就是爲什麼發生Report_ID 1和2的週一發生了4次,而週四發生了5次,但是現在在current_Month中我們發生了週一和週四的5和4(當前月份信息來自Cur_Month表),並且根據這個I想要複製prv_mon表數據,但根據星期一和星期四的發生情況--- Cur_Data

Cur_Data(所需的表) - >
Report_ID | Timeline ---------------|-------------- 01 | Weekly @Mon 01 | Weekly @Mon 01 | Weekly @Mon 01 | Weekly @Mon 01 | Weekly @Mon 02 | Weekly @Thru 02 | Weekly @Thru 02 | Weekly @Thru 02 | Weekly @Thru

在此先感謝:)

+0

你能提供樣品的輸入數據和相應的預期輸出? –

+0

Prv_Data是輸入數據,Cur_Data是預期輸出 – Jayank

+1

聽起來像一個糟糕的設計......你能詳細說明爲什麼嗎?我認爲/希望這些是意見......不是表格。 – scsimon

回答

0

對我來說也看起來,你是不是覆蓋你的需求非常好。

我沒有跟着一件事。

我唯一明白的就是你要將Cur_Month數據轉換成Cur_Data,並以某種格式緩存。我還沒有理解背景。

試試這個,讓我知道,

declare @Prv_Data table(Report_ID int,Timeline varchar(40)) 
insert into @Prv_Data VALUES 
(01,'Weekly @Mon') 
,(01,'Weekly @Mon') 
,(01,'Weekly @Mon') 
,(01,'Weekly @Mon') 
,(02,'Weekly @Thru') 
,(02,'Weekly @Thru') 
,(02,'Weekly @Thru') 
,(02,'Weekly @Thru') 
,(02,'Weekly @Thru') 


declare @Cur_Month table(Details varchar(40),Count varchar(40)) 
insert into @Cur_Month VALUES 
('First Date','05/01/2017') 
,('Last Date','05/31/2017') 
,('Friday','4') 
,('Monday','5') 
,('Saturday','4') 
,('Sunday','4') 
,('Thursday','4') 
,('Tuesday','5') 
,('Wednesday','5') 
;WITH Cur_Data as 
(
select * 
,case when Details='Monday' then '1' 
when Details='Thursday' then '2' END ReportID 
,case when Details='Monday' then 'Weekly @Mon' 
when Details='Thursday' then 'Weekly @Thru' END Timeline 
    from @Cur_Month 
where Details in('Monday','Thursday') 
) 

select REPLICATE('0',len(ReportID))+ ReportID ReportID 
,Timeline from Cur_Data c 
cross apply (select number 
from master..spt_values where number>0 
and number<=c.[count] and type='LO')cs 
+0

感謝苛刻的代碼,它提供了所需的輸出。但是,你能解釋一下「master..spt_values」的用法,它究竟在做什麼。我學習了「master..spt_values」,並且知道它是未記錄的系統表,並且因爲Microsoft可以隨時使用它,所以不安全。所以,我們有其他選擇。再次感謝! – Jayank

相關問題