我有一个函数,它使用几种情况来查找当前周期返回一个varchar(50),它是我需要的周期列。
我想对本专栏做一个总结,我不知道该怎么做。
示例:
Select SUM(ABS([dbo].[ACTUAL_PERIOD] ())) FROM Finance_DB
任何帮助都会很棒。
另外,你认为我应该首先使用这个功能吗?基本上它所做的就是完成12个案例陈述,通过查找另一个表来确定我们处于什么时期。起初我打算使用存储过程,但是......它不会返回任何内容。我之所以要使用它是因为这个特定的case语句在整个查询和所有其他查询中重复出现。它变得很长,我认为程序/功能看起来更整洁。但是,在网上做了一些阅读之后,我明白某些情况实际上并没有从函数中受益,而不是内联编写查询,它可能是多么冗长。有什么想法吗?
答案 0 :(得分:0)
在这种情况下,您应该使用动态SQL。 例如:
declare @SQL nvarchar(100);
select @SQL='Select SUM(ABS('+[dbo].[ACTUAL_PERIOD]()+')) FROM Finance_DB';
execute sp_executesql @SQL;
答案 1 :(得分: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();