URGENTE: no se hacerlo

11/09/2003 - 17:38 por fjmasero | Informe spam
Wenas:

Estoy desarrollando, + bien parcheando, una aplicacion en
la q tengo q mostrar los datos de una vista ya hecha, no
por mi, y q no puedo modificar. Tampoco puedo tocar las
tablas implicadas.

Dicha vista es

SELECT dbo.Producto.IDProducto, dbo.Producto.Descripcion,
dbo.TemporalDetalle.IDCliente,
dbo.TemporalDetalle.IdPedidoTmp, dbo.Regalos.Condicion,
dbo.TemporalDetalle.IDDetalle,
dbo.TemporalDetalle.Unidades AS UnidadesPedido,
Producto_1.Descripcion AS DescripcionProductoRegalo,
Producto_1.IDProducto AS IdProductoRegalo
FROM dbo.Articulos INNER JOIN
dbo.Regalos ON dbo.Articulos.IDArticulo =
dbo.Regalos.IDArticuloAsociado INNER JOIN
dbo.Producto ON dbo.Regalos.IDProducto =
dbo.Producto.IDProducto INNER JOIN
dbo.Articulos Articulos_1 ON dbo.Producto.IDProducto
= Articulos_1.IDProducto INNER JOIN
dbo.TemporalDetalle ON Articulos_1.IDArticulo =
dbo.TemporalDetalle.IDArticulo INNER JOIN
dbo.Producto Producto_1 ON dbo.Articulos.IDProducto
= Producto_1.IDProducto
WHERE (dbo.Producto.TipoRegalo = 'D') AND
(dbo.Producto.Estado = 'A') AND (dbo.Producto.Regalo = 1)


La estructura, resumida, es q hay productos (tabla
Producto), con/sin regalo, y "dentro" de cada producto,
hay articulos (tabla Articulos).

En TemporalDetalle hay articulos, que "pertenecen" a un
producto, y este puede tener regalo.

Dichos regalos son también articulos, q estarán en
Articulos, y que se relacionan mediante la tabla Regalos.

La vista devuelve los regalos asociados a cada articulo q
haya en TemporalDetalle, es decir, el regalo asociado al
producto al q pertenece cada articulo.

El problema es q si hay articulos del mismo producto, el
cual tiene regalo, me devuelve una tupla por cada
articulo, es decir, duplica los regalos por cada
producto, y lo q pretendo es q devuelva una sola.

¿Se os ocurre algo?.

Se q es lioso, pero espero haberme explicado. Si no,
preguntar.

Salu2 y gracias.
 

Leer las respuestas

#1 Mariano Alvarez
11/09/2003 - 18:04 | Informe spam
Podrias indicar las cardinalidades de las relaciones, las PK de cada tabla y
que contiene cada tabla.

Por ejemplo fijate los comentarios

FROM dbo.Articulos
INNER JOIN dbo.Regalos
ON dbo.Articulos.IDArticulo = dbo.Regalos.IDArticuloAsociado
INNER JOIN dbo.Producto
ON dbo.Regalos.IDProducto = dbo.Producto.IDProducto
INNER JOIN dbo.Articulos Articulos_1 --
Que hay en esta tabla?
ON dbo.Producto.IDProducto = Articulos_1.IDProducto
INNER JOIN dbo.TemporalDetalle
ON Articulos_1.IDArticulo = dbo.TemporalDetalle.IDArticulo
INNER JOIN dbo.Producto Producto_1 -- Que
hay en esta tabla?
ON dbo.Articulos.IDProducto = Producto_1.IDProducto


Tu dices, "En TemporalDetalle hay articulos, que "pertenecen" a un producto,
y este puede tener regalo" luego dices "Dichos regalos son también
articulos, q estarán en Articulos, y que se relacionan mediante la tabla
Regalos". No es algo contradictorio, el producto o el articulo es el del
regalo?

Igualmente por tus comentarios supongo que deberias armar una tabla derivada
en un subquery tipo

select .
from
(
Select
from ...
group by ...
) tabla_sin repetidos
inner join ...
where .


Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar



"fjmasero" wrote in message
news:190b01c3787a$bb3a01b0$
Wenas:

Estoy desarrollando, + bien parcheando, una aplicacion en
la q tengo q mostrar los datos de una vista ya hecha, no
por mi, y q no puedo modificar. Tampoco puedo tocar las
tablas implicadas.

Dicha vista es

SELECT dbo.Producto.IDProducto, dbo.Producto.Descripcion,
dbo.TemporalDetalle.IDCliente,
dbo.TemporalDetalle.IdPedidoTmp, dbo.Regalos.Condicion,
dbo.TemporalDetalle.IDDetalle,
dbo.TemporalDetalle.Unidades AS UnidadesPedido,
Producto_1.Descripcion AS DescripcionProductoRegalo,
Producto_1.IDProducto AS IdProductoRegalo
FROM dbo.Articulos INNER JOIN
dbo.Regalos ON dbo.Articulos.IDArticulo dbo.Regalos.IDArticuloAsociado INNER JOIN
dbo.Producto ON dbo.Regalos.IDProducto dbo.Producto.IDProducto INNER JOIN
dbo.Articulos Articulos_1 ON dbo.Producto.IDProducto
= Articulos_1.IDProducto INNER JOIN
dbo.TemporalDetalle ON Articulos_1.IDArticulo dbo.TemporalDetalle.IDArticulo INNER JOIN
dbo.Producto Producto_1 ON dbo.Articulos.IDProducto
= Producto_1.IDProducto
WHERE (dbo.Producto.TipoRegalo = 'D') AND
(dbo.Producto.Estado = 'A') AND (dbo.Producto.Regalo = 1)


La estructura, resumida, es q hay productos (tabla
Producto), con/sin regalo, y "dentro" de cada producto,
hay articulos (tabla Articulos).

En TemporalDetalle hay articulos, que "pertenecen" a un
producto, y este puede tener regalo.

Dichos regalos son también articulos, q estarán en
Articulos, y que se relacionan mediante la tabla Regalos.

La vista devuelve los regalos asociados a cada articulo q
haya en TemporalDetalle, es decir, el regalo asociado al
producto al q pertenece cada articulo.

El problema es q si hay articulos del mismo producto, el
cual tiene regalo, me devuelve una tupla por cada
articulo, es decir, duplica los regalos por cada
producto, y lo q pretendo es q devuelva una sola.

¿Se os ocurre algo?.

Se q es lioso, pero espero haberme explicado. Si no,
preguntar.

Salu2 y gracias.

Preguntas similares