2017-03-23 8 views
0

条件として複数のアカウントセットに基づいてクエリを実行する必要があります。カーソル/ whileループシナリオを回避しようとしています。 @MasterGroup変数はカーソル・イテレーターで、グループ表から直接派生します。グループ表は、WHERE節の副照会で使用されるグループ表のアカウントを1対多に含むものです。最終結果は@MasterGroup整数で新しいテーブルに取り込まれます。カーソル/ループの使用を避ける方法はありますか?多くのありがとうございます...カーソルの代わりにセットベースのクエリを使用する

Insert Into SAGTranTmp 
SELECT 
     @MasterGroup, 
     C1.Cust_Type, 
     T1.Exclude, 
     T1.Acct_No, 
     SUM(Tran_Amt) AS [Amount] 
FROM dbo.Trans AS [T1] 
    JOIN dbo.Customers AS C1 ON T1.Acct_No = C1.Acct_No 
WHERE C1.Acct_No IN (
     SELECT AcctNo 
     FROM SignAcc_Group 
     WHERE MasterGroup = @MasterGroup) 
+1

サンプルデータと望ましい結果56MM表とトランテーブルの上に今、これを実行しているThanks- –

答えて

0

私はこのことを単純化し過ぎているかもしれませんが、これを試してみてください。


IF OBJECT_ID('tempdb..#MasterGroup') IS NOT NULL 
    DROP TABLE #MasterGroup 
GO 

SELECT DISTINCT AcctNo, MasterGroup 
INTO #MasterGroup 
FROM SignAcc_Group 

CREATE NONCLUSTERED INDEX NCX_Temp_MasterGroup 
ON #MasterGroup (AcctNo) 
GO 

;WITH cte_BuildResult AS 
(
SELECT M1.MasterGroup, 
    C1.Cust_Type, 
    T1.Exclude, 
    T1.Acct_No, 
    SUM(Tran_Amt) AS [Amount] 
FROM dbo.Trans AS [T1] 
INNER JOIN dbo.Customers AS [C1] 
    ON T1.Acct_No = C1.Acct_No 
INNER JOIN @MasterGroup [M1] 
    ON C1.Acct_No = M1.AcctNo 
) 
INSERT INTO SAGTranTmp 
SELECT MasterGroup,Cust_Type,Exclude,Acct_No,[Amount] 
FROM cte_BuildResult; 

GO 

IF OBJECT_ID('tempdb..#MasterGroup') IS NOT NULL 
     DROP TABLE #MasterGroup 
GO 
1

(MasterGroup int型)という#MasterGroup AS TABLEを想定。 あなたはこれを試みることができる:

;WITH 
temp AS (SELECT DISTINCT 
    mg.MasterGroup, 
    T1.Acct_No 
FROM dbo.Trans AS [T1] 
     Inner JOIN dbo.Customers AS C1 ON T1.Acct_No = C1.Acct_No 
     inner join SignAcc_Group as sg ON C1.Acct_No = sg.AcctNo 
     inner join #MasterGroup mg ON sg.MasterGroup = mg.MasterGroup   
     ) 
Insert Into SAGTranTmp 
SELECT 
    t.MasterGroup, 
    C1.Cust_Type, 
    T1.Exclude, 
    T1.Acct_No, 
    SUM(Tran_Amt) AS [Amount] 
FROM temp t 
INNER JOIN dbo.Trans AS [T1] ON T1.Acct_No = t.Acct_No 
INNER JOIN dbo.Customers AS C1 ON T1.Acct_No = C1.Acct_No 
GROUP BY t.MasterGroup, 
     C1.Cust_Type, 
     T1.Exclude, 
     T1.Acct_No 
+0

を含めるようにあなたの質問を編集してください。別のインスタンスがカーソルバージョンを実行しています。結果をお知らせします。乾杯 – Mickey

関連する問題