2016-04-26 73 views
4

我正在爲銷售人員每月收取佣金。我需要根據我運行查詢的月份,使列名的更改。根據查詢日期(月)更改列名稱

當我在30/1/2016運行查詢像那麼coumn名字是commission for month 1commission for month January

當我運行像在30/3/2016查詢,則coumn名字是commission for month 3commission for month March

我試過這段代碼:

Select T0.commission as 'Commission for month month(getdate())' 

它不工作

+2

我想你會需要做動態。就個人而言,我不喜歡這樣的結構,但我認爲你堅持這個設置... – HoneyBadger

+1

任何給定的查詢將始終生成具有固定形狀的結果集 - 數字,*名稱*和列的類型。你沒有更好的地方來處理這種表現邏輯(例如報告前端或應用程序)嗎? –

+0

另外,想象一下,如果它實際上是這樣做的,那麼在SQL Server中進行編程會有多混淆,「如果一個字符串碰巧包含類似於表達式的東西,評估表達式並將其替換爲所獲得的值」。 –

回答

3

該查詢將返回一些虛擬數據(表名稱從系統視圖中刪除。該柱將與動態生成的字符串,命名爲:

DECLARE @cmd VARCHAR(MAX)='SELECT TABLE_NAME AS [' + 'placeYourColHere_' + CAST(MONTH(GETDATE()) AS VARCHAR(10)) + '] FROM INFORMATION_SCHEMA.TABLES;'; 
EXEC(@cmd); 
1

請嘗試此查詢

select 'Commission for month ' + CONVERT(NVARCHAR(2),DATEPART(MM,GETDATE())) AS 'Date' 
+0

不錯的想法,值得讚賞......但是我們不知道OP的查詢將返回多少行,並且一遍又一遍地重複這個可能不是解決方案... – Shnugo

+0

但是你的代碼工作正常,我的只是返回作爲列數據而不是列 –