Sv Community El Salvador

Soporte y Tecnología => Programación => Base de Datos => Mensaje iniciado por: Darkness en junio 22, 2009, 09:04:03 am

Título: Ayuda con consulta SQL
Publicado por: Darkness en junio 22, 2009, 09:04:03 am
Bueno tengo un problema con encontrar una solucion a una consulta SQL


el problemas es asi


Mi BD esta conformada por diversos owner (compaņias), para el caso cada Owner es una compaņia, entonces se entiende que la estructura va asi

compania1.precios
compania2.precios
compania3.precios
compania4.precios


ahora bien lo que necesito es obtener los precios de todas las companias en un solo reporte, pero no se como hacer la consulta si hacer un SP o una Vista...


la estructura del resultado seria algo como essto


Articulo              descripcion       compania1       compania2      compania3       compania4            

0001              articulo 1                $ 1.00             $ 2.00           $ 1.50            $ 0.00
0002              articulo 2                $ 2.00             $ 2.00           $ 1.50            $ 2.00
0003              articulo 3                $ 0.00             $ 1.00           $ 1.50            $ 1.00



No encuetro como hacerlo   :cry:


Título: Re: Ayuda con consulta SQL
Publicado por: JGuillen™ en junio 22, 2009, 09:51:18 am
Como relacionas la tabla compaņias con la tabla articulos?
Título: Re: Ayuda con consulta SQL
Publicado por: Darkness en junio 22, 2009, 09:58:36 am
Como relacionas la tabla compaņias con la tabla articulos?

La estructura es asi

BD.OWNER.TABLA

donde
BD = Base de Datos
OWNER = Compaņia
Taba = Tabla

existe una tabla compaņia, pero nada tiene que ver con la tabla articulos

ya que esa es una tabla catalogo global
dbo.compania
Título: Re: Ayuda con consulta SQL
Publicado por: sicario en junio 22, 2009, 10:30:23 am
Bueno... aveces mucho ayuda saber el gestor de base de datos que se esta utilizando, pues aunque existe un standar ISO; cada gestor de base de datos tiene sus propias FEATURE'S.

bueno.. para el caso, si no estoy mal... intuyo que estas utilizando SQL SERVER... entonces... mi querido amigo.. como vos queres un resultado HORIZONTAL en los precios por las diferentes compaņias.... lo que se me ocurre es que tus grandes aliadas... sean las SUBCONSULTAS que poderosamente sabe manejar SQL SERVER (porque a oracle le pela el gorro por en veces)....

y la onda seria mas o menos  asi.

Código: [Seleccionar]
select COD_ARTICULO AS ARTICULO,DESCRIPCION,PRECIO_COMPAŅIA1 AS COMPAŅIA1
FROM DB1.COMPAŅIA1.TABLA_PRECIOS1
ESTO TE DARIA LOS PRECIOS SOLO DE UNA SOLA COMPAŅIA...
AHORA HAGAMOS PARA EL RESTO

Código: [Seleccionar]
select COD_ARTICULO AS ARTICULO,DESCRIPCION,PRECIO_COMPAŅIA1 AS COMPAŅIA1
,ISNULL((SELECT PRECIO_COMPAŅIA2 FROM DB2.COMPAŅIA2.TABLA_PRECIOS2
   WHERE DB2.COMPAŅIA2.TABLA_PRECIOS2.COD_ARTICULO=DB1.COMPAŅIA1.TABLA_PRECIOS1),0) AS AS COMPAŅIA2
  FROM DB1.COMPAŅIA1.TABLA_PRECIOS1

El ejemplo anterior... solo lo hice... para valores de la compaņia1 y la compaņia2... pero asi susecivamente.. podes agregar para el 3 y el 4....  ahora bien.... te adelanto que dicha forma de sacar el script... tiene sus desventajas... una de ellas es la siguiente:

SI AL HACER UN COMPARE ENTRE LAS DIFERENTES TABLAS, TE DA COMO RESULTADO QUE NO SON IGUALES EN SU CONTENIDO.. EL SCRIPT UNICAMENTE TE SACARA TODOS AQUELLOS CODIGOS DE ARTICULOS.. QUE TENGAN REFERENCES.. ENTRE EL RESTOS DE TABLAS HOMOLOGAS EN LOS DIFERENTES BASES ŋsi me explico? ... de tal suerte que si vos tenes un codigo de articulo 3050-- que no existe en compaņia1 pero si esta en compaņia5--- ese articulo no aparecera.. por razones obvias de references...

Articulo              descripcion       compania1       compania2      compania3       compania4           

0001              articulo 1                $ 1.00             $ 2.00           $ 1.50            $ 0.00
0002              articulo 2                $ 2.00             $ 2.00           $ 1.50            $ 2.00
0003              articulo 3                $ 0.00             $ 1.00           $ 1.50            $ 1.00


espero haberte dado alguna idea..... saludos