none
Funcion PIVOT

    Question

  • Hola, amigo del foro, otras vez molestando que puedo hacer, en esta ocacion mi pregunta es la siguiente:

    tengo una consulta la cual realizo con la funcion PIVOT:

    SELECT ENTIDAD, [NO VENCIDAS] 'NO VENCIDAS',[0 A 30] AS '0 A 30',[31 A 60] AS '31 A 60',[61 A 90] AS '61 A 90',[91 A 120] AS '91 A 120',[121 A 180] AS '121 A 180',
          [181 A 360] AS '181 A 360',[MAS DE 361] AS 'MAS DE 361',[TOTAL CARTERA] AS 'TOTAL CARTERA' FROM

    (SELECT C.intCodigo_CLIE  [ENTIDAD],YEAR(F.dtmFechaVenc_FACT)[FECHA],(D.dcmBruto_DETA) [VALOR]--, @TotalFactura [CARTERA]
       FROM tblFACTura F INNER JOIN tblDetalle D ON F.intCodigo_FACT=D.intCodigo_FACT
    INNER JOIN tblCLIEnte C ON C.intCodigo_CLIE=F.intCodigo_CLIE
    WHERE F.strNitEmpresa='830142283-8' --GROUP BY C.strNombre_CLIE,f.dtmFechaVenc_FACT
    )pvt
     PIVOT(SUM(VALOR) FOR [FECHA] IN ([NO VENCIDAS],[0 A 30],[31 A 60],[61 A 90],[91 A 120],[121 A 180],[181 A 360],[MAS DE 361],[TOTAL CARTERA]))
    AS RESULTADO
    ORDER BY RESULTADO.ENTIDAD

    ES esta, sin embargo no entido por que cuando la ejecuto me sale 2 errores, son estos

    Mens. 8114, Nivel 16, Estado 1, Línea 15
    Error al convertir el tipo de datos nvarchar a int.
    Mens. 473, Nivel 16, Estado 1, Línea 15
    Se ha proporcionado el valor incorrecto "NO VENCIDAS" en el operador PIVOT.

    Reviso y reviso, pero no hallo la respuesta ha esto, por que???, alguna pista, algo asi, por favor.

     

    MUCHAS GRACIAS

     

    Tuesday, April 26, 2011 8:12 PM

Answers

  • si alguien necesita un pivot, que le muestre rangos de vencimientos en dias para desarrollar un informe de cartera. funciona perfecatamente.

     

    este es un ejemplo.

    SELECT  [ENTIDAD],[NO VENCIDAS],[0 A 30 DIAS],[31 A 60 DIAS],[61 A 90 DIAS],[91 A 120 DIAS],[121 A 180 DIAS],[181 A 360 DIAS],[MAS DE 361] FROM
    (SELECT C.strNombre_CLIE [ENTIDAD],(CASE WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))<0 THEN 'NO VENCIDAS'
                                         WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))>0 AND DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE())<=30 THEN '0 A 30 DIAS'
                                         WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))>31 AND DATEDIFF(DD,dtmFechaVenc_FACT, GETDATE())<=60 THEN '31 A 60 DIAS'
                                         WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))>61 AND DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE())<=90 THEN '61 A 90 DIAS'
                                         WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))>91 AND DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE())<=120 THEN '91 A 120 DIAS'
                                         WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))>121 AND  DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE())<=180 THEN '121 A 180 DIAS'
                                         WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))>181 AND DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE())<=360 THEN '181 A 360 DIAS'
                                         WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))>361 THEN 'MAS DE 361 DIAS'END)VENCIMIENTOS
     ,(dcmBruto_DETA )[VALOR]
       FROM tblFACTura F INNER JOIN tblDetalle D ON F.intCodigo_FACT=D.intCodigo_FACT
    INNER JOIN tblCLIEnte C ON C.intCodigo_CLIE=F.intCodigo_CLIE
    WHERE F.strNitEmpresa=@Nit_EMPR) AS FECHAVENCIMIENTOS
    PIVOT
    (SUM(VALOR) FOR [VENCIMIENTOS] IN([NO VENCIDAS],[0 A 30 DIAS],[31 A 60 DIAS],[61 A 90 DIAS],[91 A 120 DIAS],[121 A 180 DIAS],[181 A 360 DIAS],[MAS DE 361]))
    AS PIVOTETABLA;

    • Marked as answer by jhorsg Wednesday, April 27, 2011 4:24 PM
    Wednesday, April 27, 2011 4:24 PM

All replies

  • Hola.

    El campo [FECHA] es un entero, ya que es el resultado de la función YEAR. Así que no puede valer 'NO VENCIDAS'. Es por ello que recibes ese error.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    Tuesday, April 26, 2011 8:37 PM
  • si alguien necesita un pivot, que le muestre rangos de vencimientos en dias para desarrollar un informe de cartera. funciona perfecatamente.

     

    este es un ejemplo.

    SELECT  [ENTIDAD],[NO VENCIDAS],[0 A 30 DIAS],[31 A 60 DIAS],[61 A 90 DIAS],[91 A 120 DIAS],[121 A 180 DIAS],[181 A 360 DIAS],[MAS DE 361] FROM
    (SELECT C.strNombre_CLIE [ENTIDAD],(CASE WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))<0 THEN 'NO VENCIDAS'
                                         WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))>0 AND DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE())<=30 THEN '0 A 30 DIAS'
                                         WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))>31 AND DATEDIFF(DD,dtmFechaVenc_FACT, GETDATE())<=60 THEN '31 A 60 DIAS'
                                         WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))>61 AND DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE())<=90 THEN '61 A 90 DIAS'
                                         WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))>91 AND DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE())<=120 THEN '91 A 120 DIAS'
                                         WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))>121 AND  DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE())<=180 THEN '121 A 180 DIAS'
                                         WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))>181 AND DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE())<=360 THEN '181 A 360 DIAS'
                                         WHEN(DATEDIFF(DD,dtmFechaVenc_FACT,GETDATE()))>361 THEN 'MAS DE 361 DIAS'END)VENCIMIENTOS
     ,(dcmBruto_DETA )[VALOR]
       FROM tblFACTura F INNER JOIN tblDetalle D ON F.intCodigo_FACT=D.intCodigo_FACT
    INNER JOIN tblCLIEnte C ON C.intCodigo_CLIE=F.intCodigo_CLIE
    WHERE F.strNitEmpresa=@Nit_EMPR) AS FECHAVENCIMIENTOS
    PIVOT
    (SUM(VALOR) FOR [VENCIMIENTOS] IN([NO VENCIDAS],[0 A 30 DIAS],[31 A 60 DIAS],[61 A 90 DIAS],[91 A 120 DIAS],[121 A 180 DIAS],[181 A 360 DIAS],[MAS DE 361]))
    AS PIVOTETABLA;

    • Marked as answer by jhorsg Wednesday, April 27, 2011 4:24 PM
    Wednesday, April 27, 2011 4:24 PM