none
Usando Pivot con varios valores

    Pregunta

  • Muy buenas, tengo una consulta SQL que muestra la información deseada.

    SELECT cliente_codigo, cliente_nombre, 
    	   fecha_vencimiento, dias_vencidos, MONTH(fecha_vencimiento) as mes, YEAR(fecha_vencimiento) as anio,
    	   sum(importes) as importes, sum(pago) as pago, sum(saldo) as saldo
      FROM tmp_vtaCobranzas
     GROUP By cliente_codigo, cliente_buscar, cliente_nombre, fecha_vencimiento, dias_vencidos

    Esa información lo he pasado para verlo con un PIVOT. Pero en este, lo que se desea es agregar dos campos mas que son, los pago y los saldo, que en el pivot están comentado.

    Habría alguna forma de agregarlo en el PIVOT, o hay que usar otra forma, y si es otra forma, como seria.

    Select [anio], cliente_codigo, cliente_nombre,
    	   [1] Ene, [2] Feb, [3] Mar, [4] Abr, [5] May, [6] Jun,
           [7] Jul, [8] Ago, [9] Sep, [10] Oct, [11] Nov, [12] Dic
    FROM 
    	(SELECT YEAR(fecha_vencimiento) as [anio], cliente_codigo, cliente_nombre, MONTH(fecha_vencimiento) as mes,
    	        dias_vencidos, importes --, sum(pago), SUM(saldo)
           FROM tmp_vtaCobranzas 
    	  --WHERE fecha_vencimiento >= '2015-01-01' AND fecha_vencimiento <= '2015-12-31' 
    	) as Datos
    PIVOT
    	( SUM(importes) for Datos.mes IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
    	) as PivotTable


    Gracias


    SagaMoal.

    lunes, 09 de octubre de 2017 22:06

Todas las respuestas

  • La operacion de pivoteo (transponer filas a columnas) se realiza de la sgte forma:

    - Agrupar (group by)
    - Regar valores (expresion CASE)
    - Agregar (MIN, MAX, SUM, etc.)

    El operador PIVOT sigue el mismo principio pero solo se puede agregar una expresion a la vez.  Por eso es mejor usar la forma comun.

    SELECT
        cliente_codigo,
        cliente_nombre,
        dias_vencidos,
        SUM(CASE WHEN fecha_vencimiento >= '20150101' AND fecha_vencimiento < '20150201' THEN importes ELSE 0 END) AS importes_201501,
        SUM(CASE WHEN fecha_vencimiento >= '20150101' AND fecha_vencimiento < '20150201' THEN pago ELSE 0 END) AS pago_201501,
        SUM(CASE WHEN fecha_vencimiento >= '20150101' AND fecha_vencimiento < '20150201' THEN saldo ELSE 0 END) AS saldo_201501,
    	...
        SUM(CASE WHEN fecha_vencimiento >= '20151201' AND fecha_vencimiento < '20160101' THEN importes ELSE 0 END) AS importes_201512,
        SUM(CASE WHEN fecha_vencimiento >= '20151201' AND fecha_vencimiento < '20160101' THEN pago ELSE 0 END) AS pago_201512,
        SUM(CASE WHEN fecha_vencimiento >= '20151201' AND fecha_vencimiento < '20160101' THEN saldo ELSE 0 END) AS saldo_201512
    FROM
        tmp_vtaCobranzas
    WHERE
    	fecha_vencimiento >= '20150101'
    	AND fecha_vencimiento < '20160101'
    GROUP BY
        cliente_codigo,
        cliente_nombre,
        dias_vencidos;



    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas


    miércoles, 11 de octubre de 2017 12:27
  • Muchas gracias por responder, lo he usado para una gestión, pero hacerlo desde el 2010 al 2017,  da para pensarlo ....

    Gracias por la orientación.



    SagaMoal.

    miércoles, 11 de octubre de 2017 21:30
  • En ese caso pudieras usar pivot dinamico.  Busca en este foro por esos terminos y encontraras varios ejemplos o si prefieres postea la estructurade las tablas (solo columnas de interes), asi como data de ejemplo en forma de sentencias insert para nosotros poder tener con que trabajar sin perder tiempo simulando tu ambiente.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    jueves, 12 de octubre de 2017 14:28
  • Muy amable, primero veré si logro hacer con el pivot dinamico.

    Si no puedo, haré un ejemplo como lo pides, para que puedan orientarme a terminar este proceso.

    Gracias


    SagaMoal.

    jueves, 12 de octubre de 2017 15:05