我在医疗保健领域工作。我们的数据大部分时间都很糟糕。
由于我还不允许发布图片,上面是图片的链接,从根本上总结了我想要做的事情。
例如,我知道收件人1234在2015年1月 - 2015年4月期间有资格获得补偿。
对于那个例子,我会得到一行数据:1234 01/2015 - 04/2015
由于时间跨度包含四个月,我需要数据显示四行而不是一行。
我需要第一行:1234 1
我需要第二行:1234 2
我需要第三排:1234 3
我需要第四行:1234 4
有没有办法在TSQL中执行此操作?也许一些棘手的TSQL编码?或者SAS编码和/或python编码?
答案 0 :(得分:1)
在SAS:
data want;
set have(rename=(Month = Month_Range) );
Date_Start = input(scan(Month_Range, 1,'-','O'), anydtdte.);
Date_End = input(scan(Month_Range, 2,'-','O'), anydtdte.);
do i = 0 to intck('month', Date_Start, Date_End);
Actual_Date = intnx('month', Date_Start, i, 0, 'B');
Month = month(Actual_Date);
output;
end;
format Actual_Date monyy.;
keep Recipient_ID Month Actual_Date;
run;
答案 1 :(得分:0)
在SQL Server中,可能是这样的
Declare @YourTable Table (RecipiantID int,Month varchar(25))
Insert Into @YourTable values
(1234,'01/2015-04/2015')
;with cteM(M) As (Select N From (Values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) N(N))
,cteY(Y) As (Select 1899+Row_Number() over (Order By (Select NULL)) From cteM N1, cteM N2)
,cteD(D) As (Select DateFromParts(Y,M,1) From cteM Cross Join cteY)
Select A.RecipiantID
,Month = Month(B.D)
,ActualMonth = Format(D,'MMM-yy')
From @YourTable A
Join cteD B on D between cast(substring(Month,4,4)+'-'+left(Month,2)+'-01' as date) and cast(right(Month,4)+'-'+substring(Month,9,2)+'-01' as date)
返回
RecipiantID Month ActualMonth
1234 1 Jan-15
1234 2 Feb-15
1234 3 Mar-15
1234 4 Apr-15