2015-01-28 2 views
0

Идея этого запроса заключается в сравнении продаж товара за два периода. Я сделал запрос, который делает это хорошо, но теперь я хочу сгруппировать клиентом, я попытался добавить его в запрос, но FlameRobin сработает.Сравнение данных из одной таблицы (SELF-JOIN)

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 query

И желаемого результата я хочу его что-то вроде этого:

Desired result

+0

Можете ли вы форматировать код лучше? благодаря – Alist3r

ответ

0

Почему не выводить результаты на временную таблицу. Затем вы сможете использовать эту таблицу для суммирования данных клиентом. IE Присоедините временную таблицу к себе.

Смежные вопросы