2015-10-13 29 views
0

我想知道是否可以使用計算函數作爲列標題。請參閱下面的代碼。我想使用昨天的日期作爲總和案例列標題。在Sql列標題中使用函數

DECLARE @A AS VARCHAR(12) 
SET @A = GETDATE()-1 

select Data, 
    sum(case when DATEDIFF(DAY, Dt, GETDATE()) = 1and Type = 'Stock' 
    then Spend end) AS @A 
from dbo.vw_ZZ_AS_ComplianceLeagueTable 
group by Data 
+3

任何特定的SQL查詢將始終生成一個結果集,其中包含固定的「形狀」 - 列名的*名稱*和數據類型。您可以編寫動態SQL以在運行時構建新的查詢 - 通常更容易保持固定的形狀並將列的標籤重新標記爲不同的組件 - 例如,使用此結果集的應用程序或報告工具。 –

回答

2

我強烈建議做這種應用層重命名的。

但是,如果你還堅持你可以使用動態SQL:

LiveDemo

DECLARE @A AS VARCHAR(12)= GETDATE()-1; 

DECLARE @sql NVARCHAR(MAX) = 
    N'SELECT [Data], 
     SUM(CASE WHEN DATEDIFF(DAY, Dt, GETDATE()) = 1 AND Type = ''Stock'' THEN SPEND END) AS <placeholder> 
    FROM #vw_ZZ_AS_ComplianceLeagueTable 
    GROUP BY [Data];'; 

SET @sql = REPLACE(@sql, '<placeholder>', QUOTENAME(@A)); 

EXEC [dbo].[sp_executesql] 
     @sql; 

另一種可能性是使用sp_rename功能:

LiveDemo2

DECLARE @A AS VARCHAR(12)= GETDATE()-1; 

SELECT [Data], 
     SUM(CASE WHEN DATEDIFF(DAY, Dt, GETDATE()) = 1 AND Type = 'Stock' THEN SPEND END) AS [placeholder] 
INTO #temp 
FROM #vw_ZZ_AS_ComplianceLeagueTable 
GROUP BY [Data]; 

DECLARE @new_name NVARCHAR(128) = QUOTENAME(@A); 

EXEC tempdb..sp_rename '#temp.placeholder', @new_name, 'COLUMN'; 

SELECT * 
FROM #temp;