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.
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
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