scritto da | Nessun commento

In un post precedente abbiamo visto come effettuare delle elaborazioni sulla distinta base ovvero esplosione ed implosione, a partire da queste due operazioni è possibile effettuare altre operazioni come verificare se due distinte sono uguali o se sono simili.
Due distinte sono uguali se hanno gli stessi codici e lo stesso coefficiente d’impiego. Se consideriamo due tabelle: DISTINTA A (PADRE_A, FIGLIO_A, COEF_A) ; DISTINTA B (PADRE_B, FIGLIO_B, COEF_B)
Possiamo verificare se sono uguali tramite queste query:

SELECT [DISTINTA A].PADRE_A, [DISTINTA A].FIGLIO_A, [COEF_A]-[COEF_B] AS [DIF COEF], IIf([FIGLIO_A]=[FIGLIO_B],"UGUALE","DIVERSO") AS [DIF COD] INTO DIFFERENZE
FROM [DISTINTA A] LEFT JOIN [DISTINTA B] ON ([DISTINTA A].FIGLIO_A = [DISTINTA B].FIGLIO_B) AND ([DISTINTA A].PADRE_A = [DISTINTA B].PADRE_B);
INSERT INTO DIFFERENZE ( PADRE_A, FIGLIO_A, [DIF COEF], [DIF COD], FIGLIO_A )
SELECT [DISTINTA B].PADRE_B, [DISTINTA B].FIGLIO_B, [COEF_A]-[COEF_B] AS [DIF COEF], IIf([FIGLIO_A]=[FIGLIO_B],"UGUALE","DIVERSO") AS [DIF COD], [DISTINTA A].FIGLIO_A
FROM [DISTINTA A] RIGHT JOIN [DISTINTA B] ON ([DISTINTA A].FIGLIO_A = [DISTINTA B].FIGLIO_B) AND ([DISTINTA A].PADRE_A = [DISTINTA B].PADRE_B)
WHERE ((([DISTINTA A].FIGLIO_A) IS NULL));
SELECT DIFFERENZE.PADRE_A AS CODICE, SUM(IIf([DIF COD]="DIVERSI",1,0)) AS CODICI, SUM(IIf([DIF COEF]<>0,1,0)) AS COEFFICIENTI
FROM DIFFERENZE
GROUP BY DIFFERENZE.PADRE_A;
SELECT [RIEPILOGO DIFFERENZE].CODICE, [RIEPILOGO DIFFERENZE].CODICI, [RIEPILOGO DIFFERENZE].COEFFICIENTI, IIf([CODICI]=0 AND [COEFFICIENTI]=0,"UGUALI","DIVERSI") AS CONFRONTO
FROM [RIEPILOGO DIFFERENZE];

Per verificare se due distinte sono simili bisogna impostare delle regole per cui le distinte sono considerate simili, una prima regola stringente può essere quella per cui sono simili se hanno tutti I codici uguali ma cambiano i coefficienti d’impiego, un’altra regole meno stringente è quella di considerare simili le distinte che hanno una percentuali di codici uguali.

Lascia un Commento

News