TSQL UNPIVOT迄今为止的月份+年份列

时间:2012-02-10 12:57:02

标签: sql-server-2008 tsql pivot unpivot

我在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

1 个答案:

答案 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