2017-08-30 1 views
-1

Ich verwende den folgenden Code, um UNION zwei Sätze von Daten zu versuchen, obwohl es ohne Fehler ausgeführt wird, es für mehr als 10 Minuten ausgeführt wird und keine Ergebnisse zurückgibt, also ich frage mich, ob es etwas gibt Habe ich falsch gemacht?Verwenden von UNION in SQL mit Abfragen und Unterabfragen

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') 

Jede Anleitung ist so hilfreich.

+3

Schauen Sie sich den Ausführungsplan. –

+0

Leider habe ich nicht die Berechtigungen/Zugriff in meiner Firma, um sie anzuzeigen. – SMBRADBE

+3

Dann hol es dir. Es hat keinen Sinn, eine Abfrage zu debuggen, wenn Sie nicht die Rechte dazu haben. –

Antwort

0

In Ihrem 2. SELECT, da Sie die gleiche Tabelle zweimal abfragen, sollten Sie in der Lage sein, auf einem gemeinsamen Schlüssel (z. B. FROM TABLE a JOIN TABLE b ON a.cKey = b.cKey) zu verbinden.

Oder könnten Sie, dass die zweiten SELECT vereinfachen:

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

1

Da es keine weiteren Berechnungen und Transformationen in Daten von accounttable erforderlich sind, können Sie direkt verbinden es mit ira_hist und keine Notwendigkeit, die Unterabfrage Außerdem müssen Sie diese ON a. [Schlüsselspalte] = b. [Schlüsselspalte] - wahrscheinlich accountno auf Ihrer beitreten in Ihrer zweiten Abfrage

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')