Página 1 de 1

Campos calculados

Publicado: Mar Jul 04, 2006 12:25 pm
por jose.luis
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

Campos calculados

Publicado: Mar Jul 04, 2006 4:06 pm
por jose.luis
Hola,
Esta respuesta me la han dado desde el foro de microsoft.public.es.sqlserver
un tal Carlos.
----->
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
----->
Voy a probar lo que me cuenta.
Saludos,
José Luis Capel
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:44aa4219$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> 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
>