Campos calculados ?

04/07/2006 - 12:32 por Aicom | Informe spam
Hola,

Tabla Artículos
* art_codi char 10
art_desc char 50

Tabla PrecioArticulos
* art_codi char 10
* pre_codi char 3
pre_precio numeric 15 5
(los * representan clave primaria)

Cada fila de Artículos puede tener cero, uno o muchas filas en
PrecioArticulos

Me interesa obtener todos los artículos con todos sus posibles precios,
pero
una fila por artículo.

Vamos a poner un ejemplo

Artículos
art_codi art_desc
COD1 Artículo 1
COD2 Artículo 2

PreciosArticulos
art_codi pre_codi pre_precio
COD1 TA1 10.23
COD2 TA1 90.33
COD1 TA2 22.11
COD1 TA4 82.33

Haciendo un RIGHT JOIN saldría

SELECT Articulos.*, PreciosArticulos.* FROM Articulos RIGHT JOIN
PreciosArticulos ON Articulos.art_codi = PreciosArticulos.art_codi

Articulos.art_codi PreciosArticulos.pre_codi
PreciosArticulos.pre_precio
COD1 TA1 10.23
COD2 TA1 90.33
COD1 TA2 22.11
COD1 TA4 88.33

Pero me gustaría obtener algo así (es solo un ejemplo):

COD1 TA1 10.23 TA2 22.11 TA4 88.33
COD2 TA1 90.33 NIL NIL NIL NIL

Pero no se como... ni si es posible.

Saludos y gracias!
José Luis Capel
PD: SqlServer 2000
 

Leer las respuestas

#1 CMCC
04/07/2006 - 14:39 | Informe spam
Hola Aicom,

Aicom wrote:


Cada fila de Artículos puede tener cero, uno o muchas filas en
PrecioArticulos



Eso de 'muchas filas' puede representar un problema, pero si
los 'pre_codi' es una serie de códigos fija se puede hacer algo.


Haciendo un RIGHT JOIN saldría

SELECT Articulos.*, PreciosArticulos.* FROM Articulos RIGHT JOIN
PreciosArticulos ON Articulos.art_codi = PreciosArticulos.art_codi



Un INNER JOIN es suficiente.


Pero me gustaría obtener algo así (es solo un ejemplo):

COD1 TA1 10.23 TA2 22.11 TA4 88.33
COD2 TA1 90.33 NIL NIL NIL NIL

Pero no se como... ni si es posible.




A ver si esto te vale o por lo menos te da alguna idea:

select A.art_codi,
max(case when P.pre_codi = 'TA1' then P.pre_precio else null
end) as Precio_TA1,
max(case when P.pre_codi = 'TA2' then P.pre_precio else null
end) as Precio_TA2,
max(case when P.pre_codi = 'TA3' then P.pre_precio else null
end) as Precio_TA3,
max(case when P.pre_codi = 'TA4' then P.pre_precio else null
end) as Precio_TA4,
max(case when P.pre_codi = 'TA5' then P.pre_precio else null
end) as Precio_TA5
from Articulos A inner join PrecioArticulos P on A.art_codi P.art_codi
group by A.art_codi

Aqui la serie TA1 ... TA5 es fija.
Con el resultado de un 'select distinct pre_codi from precioarticulos'
también
puedes construir lo de arriba dinamicamente.

Saludos,
Carlos

Preguntas similares