Consulta: tablas pivote ?

30/07/2009 - 17:18 por Andres L. Arias Paz | Informe spam
Hola,
Tengo el siguiente problema .. Tengo una tabla (A) con la
siguiente estructura:

IdPedido IdProveedor
100 2
100 6
101 1
101 2
102 5
102 6
102 7
...

Necesito mostrar esta información de la siguiente manera:
IdPedido P1 P2 P3
100 2 6
101 1 2
102 5 6 7

Necesito mostrar por cada pedido hasta 3 proveedores (no más). En un
principio me pidieron mostrar sólo dos proveedores y lo resolví usando
MAX() y MIN() .. pero ahora se me complica. Estoy trabajando con la
versión de SQL server 2005 y leí un poco de tablas pivote pero no
termino de resolverlo de la forma que quiero. Alguien me puede ayudar ?
Gracias,

Andres
 

Leer las respuestas

#1 Carlos Sacristan
30/07/2009 - 17:59 | Informe spam
No es la solución más óptima, pero es una de tantas:

; WITH prev AS (
SELECT ROW_NUMBER() OVER(PARTITION BY idPedido ORDER BY IdProveedor) AS rn
, IdPedido, IdProveedor
FROM A
)
SELECT DISTINCT a.IdPedido, p1.idProveedor as p1, p2.idProveedor as p2,
p3.idProveedor as p3
FROM prev a
LEFT JOIN (SELECT IdPedido, IdProveedor FROM prev WHERE rn=1) p1 ON
a.idPedido=p1.idPedido
LEFT JOIN (SELECT IdPedido, IdProveedor FROM prev WHERE rn=2) p2 ON
a.idPedido=p2.idPedido
LEFT JOIN (SELECT IdPedido, IdProveedor FROM prev WHERE rn=3) p3 ON
a.idPedido=p3.idPedido


"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático

http://blogs.solidq.com/es/elrincondeldba


"Andres L. Arias Paz" wrote in message
news:
Hola,
Tengo el siguiente problema .. Tengo una tabla (A) con la
siguiente estructura:

IdPedido IdProveedor
100 2
100 6
101 1
101 2
102 5
102 6
102 7
...

Necesito mostrar esta información de la siguiente manera:
IdPedido P1 P2 P3
100 2 6
101 1 2
102 5 6 7

Necesito mostrar por cada pedido hasta 3 proveedores (no más). En un
principio me pidieron mostrar sólo dos proveedores y lo resolví usando
MAX() y MIN() .. pero ahora se me complica. Estoy trabajando con la
versión de SQL server 2005 y leí un poco de tablas pivote pero no termino
de resolverlo de la forma que quiero. Alguien me puede ayudar ? Gracias,

Andres

Preguntas similares