SQL Server - Consulta de una tabla intermedia en sql server

   
Vista:

Consulta de una tabla intermedia en sql server

Publicado por alejandro alejandro.10.nov@gmail.com (2 intervenciones) el 07/10/2015 17:17:07
Tengo tres tablas que son:

Deposito
-idDeposito
-fecha
-pago

Producto
-idProducto
-nombreProducto

Y esta es la tabla intermedia
Detalle_deposito
-idDeposito
-idProducto

Quiero hacer una consulta que muestre el deposito y los producto que tiene esa venta.

Esta es mi consulta:
Select deposito.idDeposito, producto.idProducto, nombreProducto
From deposito, producto, detalle_deposito
Where deposito.idDeposito=Detalle_deposito.idDeposito and producto.idProducto=Detalle_deposito.idProducto

El error es que cuando un deposito tiene varios producto se reprite el codigo de deposito con los diferentes productos.
No se si hay alguna forma de se muestre en una sola fila el codigo del deposito y sus diferentes productos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

Consulta de una tabla intermedia en sql server

Publicado por Isaias (3182 intervenciones) el 07/10/2015 17:53:14
No hay forma, SQL Server y otros motores, siempre te mostraran la información de la misma forma, eso ya esta que lo resuelvas en tu capa cliente.

Por otro lado, es conveniente que utilices INNER JOIN y dejes de utilizar código antiguo para unir tus tablas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta de una tabla intermedia en sql server

Publicado por Rafael (88 intervenciones) el 08/10/2015 09:35:06
Siento diferir con el compañero Isaias que siempre es muy acertado...
Lo que te propongo fue probado con SQL Server 2008

A ver dado este ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
CREATE TABLE Deposito
	(idDeposito int,
     fecha  date,
     pago   money)
;
 
CREATE TABLE Producto
	(idProducto int,
     nombreProducto varchar(10))
;
 
CREATE TABLE Detalle_deposito
	(idDeposito int,
idProducto int)
;
 
INSERT INTO Deposito
VALUES
	(1, getdate(), 10),
	(2, getdate()-1, 20),
	(3, getdate()-2, 30),
	(4, getdate()-3, 40),
	(5, getdate()-4, 50)
;
 
INSERT INTO Producto
values
(1,  'P 1'),
(2,  'P 2'),
(3,  'P 3'),
(4,  'P 4'),
(5,  'P 5');
 
INSERT INTO Detalle_deposito
(1,1),
(2,1),
(2,2),
(3,1),
(3,2),
(3,3),
(4,1),
(4,2),
(4,3),
(4,4),
(5,1),
(5,2),
(5,3),
(5,4),
(5,5);


Puedo Implementar esta consulta:
1
2
3
4
5
6
7
8
9
10
11
12
Select deposito.idDeposito
     , STUFF(
       (SELECT distinct
               CAST(producto.idproducto AS varchar(12))
               + '-' + producto.nombreproducto + ', '
        From   detalle_deposito
             , producto
        where  deposito.idDeposito = detalle_deposito.idDeposito
        and    producto.idproducto = detalle_deposito.idproducto
        FOR    XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
        ,1,0,'') Productos
From   deposito

Y obtener esta salida que es creo lo que necesitas...
Imagen

Puedes probar esto en el Fiddle...
Imagen

Tambien comentar que el uso de IINNER JOIN etc, para efectos de que se vea mejor las consultas y para que a otro programador le sea mas facil la lectura es bueno, internamente a ninguna Base de datos le ayuda o le beneficia ni una cosa ni otra por que internamente lo procesa como antaño.

Saludos

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Consulta de una tabla intermedia en sql server

Publicado por alejandro (2 intervenciones) el 08/10/2015 16:35:31
Muchas gracias rafael.
Me ayudaste un muchisimo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

Consulta de una tabla intermedia en sql server

Publicado por Isaias (3182 intervenciones) el 08/10/2015 22:46:55
Bueno, hay muchas formas de "matar una pulga", pero yo entendí que el NO QUERIA que se repitiera el dato de una columna en su SELECT.

-- Resultado
CTE PRO VENTA
1 H0507 2000
1 F5670 3000
1 L2345 4000

-- Lo que quiero
CTE PRO VENTA
1 H0507 2000
F5670 3000
L2345 4000

Por eso mi respuesta, ahora bien, si lo que te da como resultado es lo que esperaba, perfecto !!, se soluciono una duda mas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar