1

いくつかのケースを使用して現在の期間を検索すると、必要なものに必要な期間列である varchar(50) が返される関数があります。

このコラムの SUM を実行したいのですが、どうすればよいかわかりません。

例:

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    

アンピボットを使用して列を行に変換すると、次のようになります

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 に答える