0

SQL Server 2008 に次のテーブル構造があります。

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

行の例: 123, 0.1, 0.0, 0.5, ..... 0.7, 2008

したがって、基本的には各月の列があり、次に列の年があります。

行には、その年の各月の線量値が含まれています。

私の望ましい出力は次のとおりです。

列: PersonId、BeginDate、EndDate、Dose

BeginDate と EndDate は、DOSEx 列と年から派生します。たとえば、年が 2008 年だとすると、DOSE1 列から BeginDate が 01/01/2008 になり、EndDate が 31/01/2008 23:59 になるはずです。

DOSE4 の場合は 4 月なので、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 に答える