Online
Registriert seit: 19. Okt 2003
Ort: Heilbronn
679 Beiträge
Delphi 10.4 Sydney
|
AW: FULL OUTER JOIN zeigt nicht alle records
31. Okt 2017, 18:33
Und da im inneren Select nur Werte von G ausgegeben werden, frag' ich mich gerade, ob GL nicht einfach weg kann. (Ist vermutlich nur beim Kopieren des SQLs versehentlich übriggeblieben.)
Nee, GL hat die Werte der live-datenbank während gl_ext die werte einer vorherigen Kopie haben, die sollen ja verglichen werden um Abweichungen zu finden. GL ist eine transaktionale Accounting Tabelle, wo alle Bewegungen der Buchhaltung gespeichert werden.
Ich hab jetzt was anderes probiert : Ein Left Join um die ersten 3 Fälle abzudecken und dann ein union select zu einem Select der nur GL_Ext abfragt nach Zeilen, die nicht in GL vorkommen, um den Fall 4 abzudecken.
Code:
SELECT G.ACCT,
G.E E_Loc, G.S S_Loc, G.Tipo Tipo_Loc, G.Batch Numero_Loc, CAST(COALESCE(SUM(G.Debit-G.Credit), 0) AS Currency) Saldo_Loc,
GE.E E_Ext, GE.S S_Ext, GE.Tipo Tipo_Ext, GE.Numero Numero_Ext, COALESCE(GE.Saldo, 0) Saldo_Ext
FROM GL G
LEFT JOIN GL_EXT GE ON (GE.E=G.E AND GE.S=G.S AND GE.Tipo=G.Tipo AND GE.Numero=G.Batch AND GE.Acct=G.Acct)
WHERE G.Fecha BETWEEN '01/01/2016' AND '12/31/2016'
GROUP BY G.E, G.S, G.Tipo, G.Batch, G.ACCT, GE.Saldo, GE.E, GE.S, GE.Tipo, GE.Numero
HAVING CAST(COALESCE(SUM(G.Debit-G.Credit), 0) AS Currency) <> COALESCE(GE.Saldo, 0)
UNION
SELECT G.Acct,
NULL E_Loc, NULL S_Loc, NULL Tipo_Loc, NULL Numero_Loc, NULL Saldo_Loc,
G.E E_Ext, G.S S_Ext, G.Tipo Tipo_Ext, G.Numero Numero_Ext,
G.Saldo Salo_Ext
FROM GL_EXT G
WHERE NOT EXISTS (SELECT G1.Conteo FROM GL G1 WHERE G1.E=G.E AND G1.S=G.S AND G1.Tipo=G.Tipo AND G1.Batch=G.Numero AND G1.ACCT=G.ACCT)
|