我在SQL Server 2008中有这个表结构:
列:PersonID,DOSE1,DOSE2,DOSE3,...... DOSE12,年份
示例行:123,0.1,0.0,0.5,..... 0.7,2008
所以基本上我每个月都有一个专栏,然后是专栏一年。
这些行包含当年这几个月的剂量值。
我想要的输出是:
列:PersonId,BeginDate,EndDate,Dose
BeginDate和EndDate将从DOSEx列和年份派生。 所以说今年是2008年,DOSE1专栏将给我一个2008年1月1日的BeginDate结束EndDate应该是31/01/2008 23:59
对于DOSE4,它是四月,所以BeginDate应该是01/04/2008和EndDate 30/04/2008 23:59
使用TSQL实现此目的的任何方法?我怀疑我应该使用UNPIVOT,但不确定如何到达那里。
非常感谢任何帮助。
此致
TJ
答案 0 :(得分:2)
这应该有效:
;WITH CTE AS
(
SELECT PersonId,
CONVERT(DATETIME,CAST([YEAR] AS VARCHAR(4))+RIGHT('0'+SUBSTRING(Months,5,2),2)+'01') BeginDate,
Dose
FROM YourTable A
UNPIVOT(Dose FOR Months IN (DOSE1,DOSE2,DOSE3,DOSE4,DOSE5,DOSE6,DOSE7,DOSE8,DOSE9,DOSE10,DOSE11,DOSE12)) UP
)
SELECT PersonId, BeginDate, DATEADD(MINUTE,-1,DATEADD(MONTH,1,BeginDate)) EndDate, Dose
FROM CTE