简体   繁体   中英

Comparing data of the same table (SELF-JOIN)

the idea of this query is to compare the item's sales of two periodes. I did a query that does that good, but now i want to group by the client, i tried to add it to the query but FlameRobin crashes.

QUERY

SELECT COD, DESCRIPCION, IIF(CANTIDAD_1 IS NULL, 0, CANTIDAD_1) AS CANTIDAD1, IIF(OBSEQUIO_1 IS NULL, 0, OBSEQUIO_1) AS OBSEQUIO1,     
IIF(ABONO_1 IS NULL, 0, ABONO_1) AS ABONO1, IIF(TOTAL_1 IS NULL, 0, TOTAL_1) AS TOTAL1,    
IIF(CANTIDAD_2 IS NULL, 0, CANTIDAD_2) AS CANTIDAD2, IIF(OBSEQUIO_2 IS NULL, 0, OBSEQUIO_2) AS OBSEQUIO2,     
IIF(ABONO_2 IS NULL, 0, ABONO_2) AS ABONO2, IIF(TOTAL_2 IS NULL, 0, TOTAL_2) AS TOTAL2,     
((IIF(TOTAL_2 IS NULL, 0, TOTAL_2) - IIF(TOTAL_1 IS NULL, 0, TOTAL_1))/ IIF(TOTAL_1 IS NULL OR TOTAL_1 = 0, 1, TOTAL_1)) AS COMP     
FROM (     
    SELECT SUM(CANT1) AS CANTIDAD_1,     
    SUM(CANT_OBSEQUIO) AS OBSEQUIO_1,    
    SUM(CANT_ABONO) AS ABONO_1,     
    (SUM(CANT1) + SUM(CANT_OBSEQUIO) - SUM(CANT_ABONO)) AS TOTAL_1,     
    CODIGO as COD, DESCR AS DESCRIPCION
    FROM (     
        SELECT DISTINCT D.IDALBARAN AS IDALB, D.CODARTICULO AS CODIGO, D.DESCRIPCION_PRODUCTO AS DESCR,
        IIF(D.IDCONCEPTO IS NULL OR D.IDCONCEPTO = '', D.CANTIDAD, 0) AS CANT1,     
        IIF(D.IDCONCEPTO = 'O' OR D.IDCONCEPTO = 'P', D.CANTIDAD, 0) AS CANT_OBSEQUIO,     
        IIF(D.IDCONCEPTO = 'A', D.CANTIDAD, 0) AS CANT_ABONO     
        FROM ALBARANESVENTA_DETALLE D     
        LEFT JOIN ALBARANESVENTA_CABECERA C ON C.IDALBARAN = D.IDALBARAN     
        LEFT JOIN ARTICULOS ar ON D.CODARTICULO = ar.CODARTICULO     
        LEFT JOIN ART_FAMILIA f ON ar.IDFAMILIA = f.IDFAMILIA     
        LEFT JOIN RUTAS r on C.IDRUTAORIGINAL = r.IDRUTA  
        LEFT JOIN CLIENTES cl ON cl.IDCLIENTE = c.IDCLIENTE
        WHERE C.FECHA BETWEEN '02.10.2014' AND '09.10.2014')     
    GROUP BY COD, DESCRIPCION) T1     
LEFT JOIN (    
    SELECT SUM(CANT2) AS CANTIDAD_2,     
    SUM(CANT_OBSEQUIO2) AS OBSEQUIO_2,     
    SUM(CANT_ABONO2) AS ABONO_2,     
    (SUM(CANT2) + SUM(CANT_OBSEQUIO2) - SUM(CANT_ABONO2)) AS TOTAL_2,     
    CODIGO2 as COD2
    FROM (     
        SELECT DISTINCT D.IDALBARAN AS IDALB, D.CODARTICULO AS CODIGO2, D.DESCRIPCION_PRODUCTO AS DESCR2,
        IIF(D.IDCONCEPTO IS NULL OR D.IDCONCEPTO = '', D.CANTIDAD, 0) AS CANT2,     
        IIF(D.IDCONCEPTO = 'O' OR D.IDCONCEPTO = 'P', D.CANTIDAD, 0) AS CANT_OBSEQUIO2,     
        IIF(D.IDCONCEPTO = 'A', D.CANTIDAD, 0) AS CANT_ABONO2, C.CODCLIENTE     
        FROM ALBARANESVENTA_DETALLE D     
        LEFT JOIN ALBARANESVENTA_CABECERA C ON C.IDALBARAN = D.IDALBARAN     
        LEFT JOIN ARTICULOS ar ON D.CODARTICULO = ar.CODARTICULO     
        LEFT JOIN ART_FAMILIA f ON ar.IDFAMILIA = f.IDFAMILIA     
        LEFT JOIN RUTAS r on C.IDRUTAORIGINAL = r.IDRUTA
        LEFT JOIN CLIENTES cl ON cl.IDCLIENTE = c.IDCLIENTE
        WHERE C.FECHA BETWEEN '10.10.2014' AND '17.10.2014')     
        GROUP BY COD2) T2     
ON T1.COD = T2.COD2 
GROUP BY COD, DESCRIPCION, CANTIDAD_1, OBSEQUIO_1, ABONO_1, TOTAL_1, CANTIDAD_2, OBSEQUIO_2, ABONO_2, TOTAL_2 

Result of the query: 结果查询

And the desired result i want its something like this:

所需结果

Why not output the results to a temporary table. You will then be able to use this table to summarize the data by client. IE Join the temporary table to itself.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM