In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Campos calculados

SQL databases
jose.luis
Posts: 1633
Joined: Fri Oct 14, 2005 10:56 pm

Campos calculados

Postby jose.luis » Tue Jul 04, 2006 12:25 pm

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
jose.luis
Posts: 1633
Joined: Fri Oct 14, 2005 10:56 pm

Campos calculados

Postby jose.luis » Tue Jul 04, 2006 4:06 pm

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$1@news.xailer.com...
> 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
>

Return to “SQL”