lunes, 22 de septiembre de 2008

Programacion SQL server 2005 Pivot table

Este es un ejemplo de cómo se puede hacer una tablara para poder mostrar  los monto de los articulos por mes,  el ejemplo fue  realizado  con case, este es un emjemplo muy bueno ya que te describe como se pueden hacer las tablas de acomulados.

--Tablas Temporal

SET DATEFORMAT YMD; -- Describe el formato de fecha

CREATE TABLE#VENTA(ID_CLIENTEVARCHAR(30),NO_ARTICULOVARCHAR(10) , FECHADATETIME  , UNIDADES INT)

 

INSERT INTO #VENTAVALUES ('BACARDI' ,'P3-16','2001-1-16',30393)

INSERT INTO #VENTAVALUES ('CUERVO'  ,'P3-16','2001-1-16',10000)

INSERT INTO #VENTAVALUES ('SAUZA'   ,'B2-10','2001-2-13',88674)

INSERT INTO #VENTAVALUES ('CUERVO'  ,'B2-10','2001-3-14',1378)

INSERT INTO #VENTAVALUES ('XP-SXT'  ,'ZK-23','2001-4-1' ,9906)

INSERT INTO #VENTAVALUES ('HT'      ,'P3-16','2001-4-12',1074)

INSERT INTO #VENTAVALUES ('MODERADO','XUO-13','2001-2-17',5941)

INSERT INTO #VENTAVALUES ('SAUZA'   ,'P3-16','2001-4-18',1478)

 

SELECT  * FROM #VENTA -- MUESTRA TODOS LOS DATOS

--CORESPONDE AL AÑO DE2001

 SELECT  ID_CLIENTE ASCLIENTE ,

 sum(CASE WHENMONTH(FECHA) = 1  THENUNIDADES ELSE  0 END) ASEne,

 sum(CASE WHENMONTH(FECHA) = 2  THENUNIDADES ELSE  0 END) ASFeb,

 sum(CASE WHENMONTH(FECHA) = 3  THENUNIDADES ELSE  0 END) ASMar,

 sum(CASE WHENMONTH(FECHA) = 4  THENUNIDADES ELSE  0 END) ASAbr,

 sum(CASE WHENMONTH(FECHA) = 5  THENUNIDADES ELSE  0 END) ASMay,

 sum(CASE WHENMONTH(FECHA) = 6  THENUNIDADES ELSE  0 END) ASJun,

 sum(CASE WHENMONTH(FECHA) = 7  THENUNIDADES ELSE  0 END) ASJul,

 sum(CASE WHENMONTH(FECHA) = 8  THENUNIDADES ELSE  0 END) ASAgo,

 sum(CASE WHENMONTH(FECHA) = 9  THENUNIDADES ELSE  0 END) ASSep,

 sum(CASE WHENMONTH(FECHA) = 10 THENUNIDADES ELSE  0 END) ASOct,

 sum(CASE WHENMONTH(FECHA) = 11 THENUNIDADES ELSE  0 END) ASNov,

 sum(CASE WHENMONTH(FECHA) = 12 THENUNIDADES ELSE  0 END) ASDic

 

FROM #VENTA

 WHERE FECHA between'20010116' and '20011231' 

 

GROUP BY ID_CLIENTE  -- OREDENA POR CLIENTE

ORDER BY 1  -- OREDENA LOS REGSITROS

 

DELETE FROM #VENTA -- BORRAR DATOS TEMPORELES

DROP TABLE #VENTA -- BORRAR TABLA

 

 

ok esto es bastaste largo  la ventaja que nos ofrese el pivot es la siguiente 

 

SELECT txt_cliente ,txt_desc_cliente , txt_articulo,ISNULL([1],0) 'txt_ene',ISNULL([2],0)  'txt_feb', ISNULL([3],0)  'txt_mar', ISNULL([4],0)  'txt_abr',

ISNULL([5],0)  'txt_may', ISNULL([6],0)  'txt_jun', ISNULL([7],0)  'txt_jul', ISNULL([8],0)  'txt_ago', ISNULL([9],0)  'txt_sep', ISNULL([10],0) 'txt_oct', ISNULL([11],0) 'txt_nov', ISNULL([12],0) 'txt_dic'

FROM (

   SELECT V.ID_CLIENTE AS'txt_cliente' ,

 C.COLUMN_DESC_CLIENTE2AS 'txt_desc_cliente',

NO_ARTICULO AS'txt_articulo',

     MONTH(FECHA) AS 'MES' ,

    UNIDADES AS 'UNIDADES'

  FROM VENTA  V , CLIENTE C

 WHERE V.ID_CLIENTE =C.ID_CLIENTE

    AND     FECHA between'20080101' and '20081231'

  GROUP BY C.COLUMN_DESC_CLIENTE2, V.ID_CLIENTE ,V.NO_ARTICULO , V.FECHA,      V.UNIDADES )COLUMNAS

PIVOT ( SUM(UNIDADES)FOR MES IN ([1], [2], [3], [4],[5],[6], [7], [8], [9],                                [10], [11], [12]) )AS PT

ORDER BY txt_desc_cliente

 

 

No hay comentarios: