我有以下CTE。其目的是提供獨特的月/年對。後面的代碼將使用CTE生成Month/Year對的連接字符串列表。T-SQL - 如何在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函數的實現,因爲它是微不足道的。
編輯:根據要求由Martin,這裏是周邊代碼:
DECLARE @PivotColumnHeaders nvarchar(MAX)
--CTE declaration as above---
SELECT @PivotColumnHeaders =
COALESCE(
@PivotColumnHeaders + ',[' + Month + ']',
'[' + Month + ']'
)
FROM tblStoredWillsInPeriod
SELECT @PivotColumnHeaders
可悲的是,它似乎T-SQL是永遠領先一步。當我運行這段代碼時,它告訴我我不允許在CTE中使用ORDER BY,除非我也使用TOP(或FOR XML,不管是什麼)。如果我使用TOP,它告訴我我不能使用它與DISTINCT。是的,T-SQL有所有的答案。
任何人都可以想出解決這個問題的方法,它比簡單地削減我的手腕快嗎?我明白,失血過後的死亡可能會令人驚訝地徘徊,我有最後期限要見面。
感謝您的幫助。
大衛
你可以發佈使用CTE的代碼嗎?還有GetMonthAndYearString返回的值的格式?你說你正在嘗試使用它在這裏http://www.kodyaz.com/articles/t-sql-pivot-tables-in-sql-server-tutorial-with-examples.aspx。你知道CTE只是在下一個聲明的範圍內嗎?所以,當你填充@PivotColumnHeaders時,它會超出下一個位的範圍。 – 2010-06-14 11:08:04
GetMonthAndYearString返回格式爲MMM-YYYY的varchar(8)。我知道CTE的範圍限制 - 我現在提供的代碼已經包含在代碼中。 – David 2010-06-14 12:42:41