TSQL UNPIVOT для месяца + столбец года на дату - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть такая структура таблицы в SQL Server 2008:

Столбцы: PersonID, DOSE1, DOSE2, DOSE3, ..... DOSE12, YEAR

пример строки: 123, 0,1,0.0, 0.5, ..... 0.7, 2008

Таким образом, в основном у меня есть столбец для каждого месяца, а затем столбец year.

И строки содержат значения дозы для каждого из этихмесяцы этого года.

Мой желаемый результат:

Столбцы: PersonId, BeginDate, EndDate, Dose

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

1 Ответ

2 голосов
/ 10 февраля 2012

Это должно работать:

;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
...