У меня есть следующий CTE. Его целью является предоставление уникальных пар месяц / год. Более поздний код будет использовать CTE для создания объединенного списка строк пар Месяц / Год.
;WITH tblStoredWillsInPeriod AS
(
SELECT DISTINCT Kctc.GetMonthAndYearString(DateWillReceived) Month
FROM Kctc.StoredWills
WHERE DateWillReceived BETWEEN '2010/01/01' AND '2010/03/31'
ORDER BY DateWillReceived
)
Я пропустил реализацию функции GetMonthAndYearString, поскольку она тривиальна.
Редактировать: По просьбе Мартина, вот код:
DECLARE @PivotColumnHeaders nvarchar(MAX)
--CTE declaration as above---
SELECT @PivotColumnHeaders =
COALESCE(
@PivotColumnHeaders + ',[' + Month + ']',
'[' + Month + ']'
)
FROM tblStoredWillsInPeriod
SELECT @PivotColumnHeaders
К сожалению, кажется, что T-SQL всегда на шаг впереди. Когда я запускаю этот код, он говорит мне, что я не могу использовать ORDER BY в CTE, если я также не использую TOP (или FOR XML, что бы это ни было.) Если я использую TOP, он говорит, что я не могу его с отличием. Да, у T-SQL есть все ответы.
Кто-нибудь может придумать решение этой проблемы, которое быстрее, чем просто порезать мои запястья? Я понимаю, что смерть от потери крови может быть удивительно долгой, и у меня есть сроки, которые нужно соблюдать.
Спасибо за вашу помощь.
David