2013-10-18 38 views
1

我有一個函數,它使用幾種情況來查找當前期間返回一個varchar(50),這是我需要的時間段所需的列。TSQL:函數的返回值是列的名稱

我想做一個SUM這個列,我不知道如何去做。

例子:

Select SUM(ABS([dbo].[ACTUAL_PERIOD]())) FROM Finance_DB 

任何幫助將是巨大的。

另外,你認爲我應該打擾使用函數呢?基本上它所做的只是通過查看另一個表格來確定我們所處的階段。起初我要使用存儲過程,但是......它不會返回任何東西。我之所以要使用它,是因爲這個特定的案例陳述在整個查詢和其他所有查詢中重複出現。它變得很長,我認爲程序/功能看起來更整齊。但是,在網上完成了一些閱讀,我明白某些情況實際上並沒有從函數中獲益,而是在線編寫查詢,這可能是冗長的。有什麼想法嗎?

+0

雖然它被暗示這是SQL Server中,請添加它在標籤中。 –

+1

您可以發佈當前函數的代碼以及它如何使用?你試圖達到什麼目的不起作用? –

+0

你想總結varchar值嗎? –

回答

0

在這種情況下,您應該使用動態SQL。 例如:

declare @SQL nvarchar(100); 
select @SQL='Select SUM(ABS('+[dbo].[ACTUAL_PERIOD]()+')) FROM Finance_DB'; 
execute sp_executesql @SQL; 
+0

謝謝。這有效,但我試圖避免變得動態。 –

0

如果我理解你的代碼正確,你在不同的列有周期值。

Period1 Period2 Period3... 
    100  200  400 
    130  250  300  

使用UNPIVOT到列轉換爲行,所以它看起來像

ColumnName Value 
Period1 100 
Period2 200 
Period3 400 
... 

的代碼看起來像

WITH Values AS (
    SELECT ColumnName 
      ,Value 
    FROM Finance_DB 
     UNPIVOT (Value FROM ColumnName IN (Period1, Period2,...) 
) 
SELECT SUM(ABS(Value)) 
FROM Values 
WHERE ColumnName = Actual_Period();