0

我在 SQL Server 2008 中有这个表结构:

列:PersonID、DOSE1、DOSE2、DOSE3、..... DOSE12、YEAR

示例行:123、0.1、0.0、0.5、..... 0.7、2008

所以基本上我每个月都有一个专栏,然后是一个专栏年份。

这些行包含当年每个月的剂量值。

我想要的输出是:

列:PersonId、BeginDate、EndDate、剂量

BeginDate 和 EndDate 将来自 DOSEx 列和年份。所以说年份是 2008 年,DOSE1 列会给我一个 BeginDate 01/01/2008 结束 EndDate 应该是 31/01/2008 23:59

对于 DOSE4,它是四月,所以 BeginDate 应该是 01/04/2008 和 EndDate 30/04/2008 23:59

有什么方法可以使用 TSQL 实现这一点?我怀疑我应该使用 UNPIVOT,但不确定如何到达那里。

任何帮助深表感谢。

问候,

TJ

4

1 回答 1

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
于 2012-02-10T14:12:03.733 回答