2017-05-25 62 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

相关问题