Clausula PIVOT.

01/11/2006 - 12:18 por Jose Antonio | Informe spam
Estoy intentando entender como funciona la clausula PIVOT en sql server
2005, y con los ejemplos que hay en los libros en pantalla no consigo
hacerlo, por ejemplo el sistema que utilizo en 2000 y que sigo utilizando en
2005 porque no se como hacerlo con PIVOT.

SELECT CLIENTE,

CASE WHEN ANO=@ANO1 THEN VENTAS ELSE 0 END AS VENTAS1,

CASE WHEN ANO=@ANO2 THEN VENTAS ELSE 0 END AS VENTAS2,

CASE WHEN ANO=@ANO3 THEN VENTAS ELSE 0 END AS VENTAS3,

CASE WHEN ANO=@ANO4 THEN VENTAS ELSE 0 END AS VENTAS4,

CASE WHEN ANO=@ANO5 THEN VENTAS ELSE 0 END AS VENTAS5,

CASE WHEN ANO=@ANO1 THEN DEPOSITO ELSE 0 END AS DEPOSITO1,

CASE WHEN ANO=@ANO2 THEN DEPOSITO ELSE 0 END AS DEPOSITO2,

CASE WHEN ANO=@ANO3 THEN DEPOSITO ELSE 0 END AS DEPOSITO3,

CASE WHEN ANO=@ANO4 THEN DEPOSITO ELSE 0 END AS DEPOSITO4,

CASE WHEN ANO=@ANO5 THEN DEPOSITO ELSE 0 END AS DEPOSITO5

FROM

(SELECT CLIENTE,ANO,SUM(VENTAS) AS VENTAS,SUM(DEPOSITO) AS DEPOSITO FROM
VT_FACTURASCLIENTE (NOEXPAND)

WHERE ANO>=@ANO1 AND ANO<=@ANO5 GROUP BY CLIENTE,ANO) A

¿Como seria esta sentencia con la calusula PIVOT?



Saludos.
 

Leer las respuestas

#1 Alejandro Mesa
01/11/2006 - 15:10 | Informe spam
Jose Antonio,

Creo que va a ser dificil dar con una sentencia que haga ese pivot. El
operador "pivot" de SQL Server 2005 no funciona con variables en la lista de
valores que se convertiran en los titulos de columnas. Por otra parte, estas
agregando dos columnas (ventas y depositos) y con este operador solo se
permite 1, al menos que hagas dos pivots y los unas mediante un join.

Para poder usar variables, tendremos que recurrir a sql dinamico. Aca te
paso un ejemplo sobre este tema, posteado por Javier Loria quien es un gran
colaborador de este grupo.

http://www.microsoft.com/communitie...sloc=en-us


AMB



"Jose Antonio" wrote:

Estoy intentando entender como funciona la clausula PIVOT en sql server
2005, y con los ejemplos que hay en los libros en pantalla no consigo
hacerlo, por ejemplo el sistema que utilizo en 2000 y que sigo utilizando en
2005 porque no se como hacerlo con PIVOT.

SELECT CLIENTE,

CASE WHEN ANO=@ANO1 THEN VENTAS ELSE 0 END AS VENTAS1,

CASE WHEN ANO=@ANO2 THEN VENTAS ELSE 0 END AS VENTAS2,

CASE WHEN ANO=@ANO3 THEN VENTAS ELSE 0 END AS VENTAS3,

CASE WHEN ANO=@ANO4 THEN VENTAS ELSE 0 END AS VENTAS4,

CASE WHEN ANO=@ANO5 THEN VENTAS ELSE 0 END AS VENTAS5,

CASE WHEN ANO=@ANO1 THEN DEPOSITO ELSE 0 END AS DEPOSITO1,

CASE WHEN ANO=@ANO2 THEN DEPOSITO ELSE 0 END AS DEPOSITO2,

CASE WHEN ANO=@ANO3 THEN DEPOSITO ELSE 0 END AS DEPOSITO3,

CASE WHEN ANO=@ANO4 THEN DEPOSITO ELSE 0 END AS DEPOSITO4,

CASE WHEN ANO=@ANO5 THEN DEPOSITO ELSE 0 END AS DEPOSITO5

FROM

(SELECT CLIENTE,ANO,SUM(VENTAS) AS VENTAS,SUM(DEPOSITO) AS DEPOSITO FROM
VT_FACTURASCLIENTE (NOEXPAND)

WHERE ANO>=@ANO1 AND ANO<=@ANO5 GROUP BY CLIENTE,ANO) A

¿Como seria esta sentencia con la calusula PIVOT?



Saludos.



Preguntas similares