私はクエリを高速化しようとしています。私は2つのスカラー値関数を1行につき2つのパラメーターをパラメーターとして実行する必要があります。ローごとに複数のスカラー関数を実行する最も効率的な方法
機能は、実行中の合計に基づいて計算を行い、そして2008年
は私のクエリのCTE部分がすべての行を取得するSQLサーバーでこれを行うには(私の知ること)簡単な方法はありません私は計算が必要で、各レベルごとに個別に実行する必要があります。ストアに対するクライアントの関係は1対多ですが、各ストアの計算に基づいてクライアントレベル(Store = 'All')で計算を取得することはできません。
私の最初の試みは、 'SELECT'ステートメントで関数呼び出しを行うことでしたが、それらは同期して実行される必要はないと読みました。以下の試みは、計算を非同期に実行しようとする際にテーブル値に変換しようとしていました。
私はOUTER APPLYが行く方法であるのか、これについてもっと効率的な方法があるのだろうと思っていました。
詳細情報が必要な場合はお知らせください。
DECLARE @StartTime INT
SET @StartTime=20170101
DECLARE @EndTime INT
SET @EndTime=20170131
;WITH IsAvgStores AS (
SELECT
COALESCE(ParentClient,'All') AS ParentClient,
COALESCE(Client,'All') AS Client,
COALESCE(Store,'All') AS Store,
MAX(Answer_Threshold),
MAX(SL_Threshold)
FROM
client_hierarchy
WHERE
GETDATE() BETWEEN EFF_BEGIN_DATE AND EFF_END_DATE
GROUP BY ROLLUP(ParentClient,Client,Store)
)
SELECT I.ParentClient,I.Client,I.Store
,SL.isAvg_SL_String
,A.isAvg_ASA_String
INTO #isAvgTemp
FROM IsAvgStores I
OUTER APPLY (SELECT dbo.isAvg_S_B(ParentClient,Client,Store,Answer_Threshold,@StartTime,@EndTime) AS isAvg_SL_String
) SL
OUTER APPLY (SELECT dbo.isAvg_A_B(ParentClient,Client,Store,SL_Threshold,@StartTime,@EndTime) AS isAvg_ASA_String
) A
WHERE ParentClient<>'All'
SELECT *
FROM #isAvgTemp
ロールアップがどのように動作しているのかわかりません – Paparazzi
@パパラッチあなたは正しいです、私はしきい値でMAX()を追加するのを忘れました。 – reidodorito