Pivot -- script

08/07/2007 - 00:46 por Pedro | Informe spam
Hola

Estoy con un script.
Esplico que quiero hacer, resumiendo:

Tengo 2 tablas:

Tabla1 :
CampoCodigoPieza CampoDescripcionPieza
ABV3456 Pantalones Azules
AVBG567 Pantalones Grines
AGH5678 Pantalones Verdes
...


Tabla2 :
CampoNombreCiente CampoPiezaComprada
Jorge ABV3456
Carlos AGH5678
Jorge ABV3456
Pedro ABV3456


Quiero obtener un Script que me genere una tabla3 de la forma:
CampoCiente PantalonAzules PantalonVerdes PantalonGris
Jorge 1 0 1

Carlos 0 1 0

Pedro 1 0 0

Que ponga 1 si comapra ese modelo, 0 si no compara ese mododelo.

He estado mirando de hacerlo mediante el PIVOT pero no me vale de la forma:

Select CampoCodigoPieza as campocliente, [ABV3456] as "PantalonAzules",
[AVBG567] as "PantalonVerdes", [AGH5678] as "PantalonGris"
from tabla1
PIVOT ( for tabla3 in ([ABV3456], [AVBG567], [AGH5678]) as pvt

Pero no me vale ya que me faltaria un campo en la tabla1 del numero de
pantalos que compran de cada tipo. y de este campo habria que hacer un sum()
y ponerlo delante del for

La tabla que me quiero crear mediante un scrip, quiero que si algun dia me
añaden en la tabla1 un nuevo registro la final (tabla3) lo tenga en cuenta y
me aparezca.

Alguna idea.
Gracias
 

Leer las respuestas

#1 Alejandro Mesa
08/07/2007 - 02:18 | Informe spam
Hola Pedro,

Trata:

use northwind
go

create table dbo.t1 (
CampoCodigoPieza varchar(15),
CampoDescripcionPieza varchar(50)
)
go

insert into dbo.t1 values('ABV3456', 'Pantalones Azules')
insert into dbo.t1 values('AVBG567', 'Pantalones Grines')
insert into dbo.t1 values('AGH5678', 'Pantalones Verdes')
go

create table dbo.t2 (
CampoNombreCiente varchar(25),
CampoPiezaComprada varchar(15)
)
go

insert into dbo.t2 values('Jorge', 'ABV3456')
insert into dbo.t2 values('Carlos', 'AGH5678')
insert into dbo.t2 values('Jorge', 'AVBG567')
insert into dbo.t2 values('Pedro', 'ABV3456')
go

select
*
from
(
select
b.CampoNombreCiente,
a.CampoDescripcionPieza
from
dbo.t1 as a
inner join
dbo.t2 as b
on a.CampoCodigoPieza = b.CampoPiezaComprada
) as c
pivot
(count(CampoDescripcionPieza) for CampoDescripcionPieza in ([Pantalones
Azules], [Pantalones Verdes], [Pantalones Grines])) as d
go

drop table dbo.t1, dbo.t2
go


AMB


"Pedro" wrote:

Hola

Estoy con un script.
Esplico que quiero hacer, resumiendo:

Tengo 2 tablas:

Tabla1 :
CampoCodigoPieza CampoDescripcionPieza
ABV3456 Pantalones Azules
AVBG567 Pantalones Grines
AGH5678 Pantalones Verdes
...


Tabla2 :
CampoNombreCiente CampoPiezaComprada
Jorge ABV3456
Carlos AGH5678
Jorge ABV3456
Pedro ABV3456


Quiero obtener un Script que me genere una tabla3 de la forma:
CampoCiente PantalonAzules PantalonVerdes PantalonGris
Jorge 1 0 1

Carlos 0 1 0

Pedro 1 0 0

Que ponga 1 si comapra ese modelo, 0 si no compara ese mododelo.

He estado mirando de hacerlo mediante el PIVOT pero no me vale de la forma:

Select CampoCodigoPieza as campocliente, [ABV3456] as "PantalonAzules",
[AVBG567] as "PantalonVerdes", [AGH5678] as "PantalonGris"
from tabla1
PIVOT ( for tabla3 in ([ABV3456], [AVBG567], [AGH5678]) as pvt

Pero no me vale ya que me faltaria un campo en la tabla1 del numero de
pantalos que compran de cada tipo. y de este campo habria que hacer un sum()
y ponerlo delante del for

La tabla que me quiero crear mediante un scrip, quiero que si algun dia me
añaden en la tabla1 un nuevo registro la final (tabla3) lo tenga en cuenta y
me aparezca.

Alguna idea.
Gracias

Preguntas similares