1

我有一个函数,它使用几种情况来查找当前周期返回一个 varchar(50),它是我需要的周期列。

我想对这个专栏做一个总结,但我不知道该怎么做。

例子:

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

任何帮助都会很棒。

另外,您认为我应该首先打扰使用该功能吗?基本上它所做的只是通过 12 个案例陈述来确定我们通过查找另一个表格来确定我们所处的时期。起初我打算使用存储过程,但是呃......它不会返回任何东西。我打算使用它的原因是因为这个特殊的 case 语句在整个查询和所有其他查询中重复出现。它变得很长,我认为程序/函数看起来会更整洁。然而,在网上做了一些阅读后,我知道某些情况实际上并没有从函数中受益,而不是内联编写查询,它可能有多冗长。有什么想法吗?

4

2 回答 2

0

在这种情况下,您应该使用动态 SQL。例如:

declare @SQL nvarchar(100);
select @SQL='Select SUM(ABS('+[dbo].[ACTUAL_PERIOD]()+')) FROM Finance_DB';
execute sp_executesql @SQL;
于 2013-10-18T14:20:43.147 回答
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();
于 2013-10-18T16:30:06.437 回答