Интересно, какое решение лучше. Мне нужно объявить некоторые переменные, которые рассчитываются с использованием функций даты T-SQL (DATEADD, DATEPART, GETDATE() и т. д.).
После некоторых исследований я пишу это:
WITH DatePeriods(ThisWeek,LastWeek,MonthToDate,QuarterToDate,YearToDate) AS
(
SELECT "...date functions..." AS ThisWeek
"...date functions..." AS LastWeek
"...date functions..." AS MonthToDate
"...date functions..." AS QuarterToDate
"...date functions..." AS YearToDate
)
SELECT Desciption,Value
FROM DatePeriods
UNPIVOT
(
Value FOR Desciption IN (ThisWeek,LastWeek,MonthToDate,QuarterToDate,YearToDate)
) AS Source
И это выглядит круто, потому что у меня есть "cte" и "unpivot". Если я хочу добавить другую переменную даты, я должен вставить только CTE.
И другое решение использует обычный «союз»:
SELECT 'ThisWeek',"...date functions..." AS ThisWeek
UNION
SELECT 'LastWeek',"...date functions..." AS LastWeek
UNION
SELECT 'MonthToDate',"...date functions..." AS MonthToDate
UNION
SELECT 'QuarterToDate',"...date functions..." AS QuarterToDate
UNION
SELECT 'YearToDate',"...date functions..." AS YearToDate
Я думаю, что это не так хорошо, потому что новая переменная даты означает новое объединение, но в конце концов объединение только между несколькими переменными.
Может ли кто-нибудь сказать мне, какой метод является хорошей практикой в этом случае или даже предлагает другое решение?
Заранее спасибо.
РЕДАКТИРОВАТЬ:
Это результат, который я хочу:
Desciption Value
ThisWeek 2012-08-05 08:55:23.013
LastWeek 2012-07-29 08:55:23.013
MonthToDate 2012-07-08 08:55:23.013
QuarterToDate 2012-05-08 08:55:23.013
YearToDate 2011-08-08 08:55:23.013