2017-08-30 17 views
-1

次のコードを使用して2つのデータセットを結合しようとしましたが、エラーなしで実行されますが、10分以上実行されています。私は間違っている?クエリとサブクエリでUNIONを使用する

select BIH.SourceCode, BIH.MarketValueAmt as CorrectedAmt 
from [dbo].[IRA_HIST] as BIH 
JOIN 
    (select accountno, accountclass 
    from accounttable 
    where accountclass in ('A','B','C','D')) AS AccountNos 
ON BIH.ACCOUNTNO = ACCOUNTNOS.ACCOUNTNO 
where BIH.securityno > '0' 
UNION 
SELECT SourceCode, (Amount*(-1)) as CorrectedAmt 
from accttable a, activitytable b 
where a.accountclass in ('A','B','C','D') 
and b.recordtype in ('r','c') 

どのようなガイダンスも役立ちます。

+3

実行計画を見てください。 –

+0

残念ながら、私は私の会社でそれらを閲覧するためのアクセス権/アクセス権を持っていません。 – SMBRADBE

+3

それからそれを入手してください。あなたがそれを行う権利を持っていない場合、クエリのデバッグに意味がありません。 –

答えて

0

SELECTでは、同じテーブルを2回クエリしているため、共通キー(例:FROM TABLE a JOIN TABLE b ON a.cKey = b.cKey)にJOINする必要があります。

または、SELECTその第二を簡素化することができます:

FROM TABLE WHERE AccountClass IN ('A', 'B',...) OR RecordType IN ('r', 'c')

1

accounttableからのデータに必要な他の計算と変換が存在しないので、あなたが直接持ってira_histおよびなくても、それに参加することができますサブクエリ[キー列] = b。[キー列] - おそらく2回目のクエリでの結合には関係ありません。

SELECT BIH.SourceCode, 
     BIH.MarketValueAmt AS CorrectedAmt 
    FROM [dbo].[IRA_HIST] BIH 
    JOIN accounttable AccountNos 
    ON BIH.ACCOUNTNO = ACCOUNTNOS.ACCOUNTNO 
    AND BIH.securityno > '0' 
    AND AccountNos.accountclass in ('A','B','C','D') 
UNION -- or UNION ALL if you want to retain duplicates 
SELECT SourceCode, 
     (Amount*(-1)) as CorrectedAmt 
    FROM accttable a, 
    JOIN activitytable b 
    ON a.[key column] = b.[key column] -- probably accountno 
    AND a.accountclass IN ('A','B','C','D') 
    AND b.recordtype IN ('r','c') 
関連する問題