Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Inner Join Me Multiplica los Resultados de 2 Tablas

Estas en el tema de Inner Join Me Multiplica los Resultados de 2 Tablas en el foro de SQL Server en Foros del Web. Buen Dia, quisiera que alguien me pudiera ayudar, lo que pasa es que hice un query con 2 tablas en cada tabla tengo un campo ...
  #1 (permalink)  
Antiguo 12/06/2013, 10:56
 
Fecha de Ingreso: junio-2013
Mensajes: 8
Antigüedad: 10 años, 10 meses
Puntos: 0
Inner Join Me Multiplica los Resultados de 2 Tablas

Buen Dia, quisiera que alguien me pudiera ayudar, lo que pasa es que hice un query con 2 tablas en cada tabla tengo un campo que se llama "Num_escaneos" entonces si en la tabla "tb_escaneos" tengo 5 registros en el campo "Num_escaneos" y en la tabla "tb_escanesSalida" tengo 8 registros en el campo "Num_escaneos" como los tengo agrupados por usuario quiero que me arroje el numero de escaneos por usuario, pues debe de arrojar de forma correcta esto, por ejemplo:
Juan tb_escaneos.Num_escaneos = 5, tb_escaneosSalida.Num_escaneos = 8

Pero me lo multiplica y me arroja esto:
Juan tb_escaneos.Num_escaneos = 40, tb_escaneosSalida.Num_escaneos = 40

Me multiplico los numeros de los registros que tiene cada campo hizo esto:
5X8 = 40.


Este es mi Query:
Código SQL:
Ver original
  1. SELECT a.id_usuario , a.nombre_usuario , SUM(b.Num_escaneos) AS EscaneosEntrada , SUM(c.Num_escaneos) AS EscaneosSalida FROM dbo.tb_usuarios a LEFT JOIN  dbo.tb_escaneos b
  2. ON  a.id_usuario = b.id_usuario
  3. LEFT JOIN dbo.tb_escaneosSalida c  
  4. ON  b.id_usuario = c.id_usuario GROUP BY a.id_usuario,a.Nombre_Usuario
Y esta es la estructura de las 3 tablas que utilizo:


tb_Usuarios
----------------
id_usuario --> PK
numero_usuario
password_usuario
tipo
Nombre_usuario


tb_escaneos
----------------
id_escaneos --> PK
num_escaneos
id_usuario --> FK
id_contenedor
Fecha_Escaneo
fifo
fecha


tb_escaneosSalida
---------------------
id_escaneosSalida --> PK
num_escaneos
id_usuario --> FK
id_contenedor
Fecha_Escaneo
fifo
fecha



Les agradeceria mucho su respuesta. Gracias!!

Última edición por gnzsoloyo; 12/06/2013 a las 11:02
  #2 (permalink)  
Antiguo 12/06/2013, 11:25
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Inner Join Me Multiplica los Resultados de 2 Tablas

Dime si funciona

Código SQL:
Ver original
  1. SELECT TU.id_usuario, numero_usuario, x.ScaneosEntrada, X.ScaneosSalida
  2. FROM tb_Usuarios TU JOIN
  3.   (SELECT A.id_usuario,
  4.                         SUM(A.num_escaneos) AS ScaneosEntrada,
  5.                         SUM(B.num_escaneos) AS ScaneosSalida
  6. FROM tb_escaneos A INNER JOIN tb_escaneosSalida B ON A.id_usuario = B.id_usuario
  7. GROUP BY A.id_usuario) AS X
  8. ON X.id_usuario = TU.id_usuario
  9. GROUP BY TU.id_usuario
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 12/06/2013, 11:42
 
Fecha de Ingreso: junio-2013
Mensajes: 8
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Inner Join Me Multiplica los Resultados de 2 Tablas

Gracias por responder iislas, cuando ejecuto tu codigo me manda este error:

Column 'X.ScaneosEntrada' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
  #4 (permalink)  
Antiguo 12/06/2013, 11:45
 
Fecha de Ingreso: junio-2013
Mensajes: 8
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Inner Join Me Multiplica los Resultados de 2 Tablas

Ya lo pude ejecutar iislas, pero me arroja el mismo resultado que con mi query, gracias de antemano.
  #5 (permalink)  
Antiguo 12/06/2013, 11:46
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Inner Join Me Multiplica los Resultados de 2 Tablas

Código SQL:
Ver original
  1. SELECT TU.id_usuario, numero_usuario, x.ScaneosEntrada, X.ScaneosSalida
  2. FROM tb_Usuarios TU JOIN
  3.   (SELECT A.id_usuario,
  4.                         SUM(A.num_escaneos) AS ScaneosEntrada,
  5.                         SUM(B.num_escaneos) AS ScaneosSalida
  6. FROM tb_escaneos A INNER JOIN tb_escaneosSalida B ON A.id_usuario = B.id_usuario
  7. GROUP BY A.id_usuario) AS X
  8. ON X.id_usuario = TU.id_usuario
  9. GROUP BY TU.id_usuario, numero_usuario, x.ScaneosEntrada, X.ScaneosSalida

prueba con eso :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 12/06/2013, 11:51
 
Fecha de Ingreso: junio-2013
Mensajes: 8
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Inner Join Me Multiplica los Resultados de 2 Tablas

Gracias por respoder Libras, e codigo si funciona pero igual me los sigue multiplicando :( osea que aun no puedo resolver mi problema :(
  #7 (permalink)  
Antiguo 12/06/2013, 13:34
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Inner Join Me Multiplica los Resultados de 2 Tablas

un ejemplo de tus datos por favor :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 12/06/2013, 13:48
 
Fecha de Ingreso: junio-2013
Mensajes: 8
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Inner Join Me Multiplica los Resultados de 2 Tablas

Aqui te mando un script de esas 3 tablas con datos, gracias!!
Código SQL:
Ver original
  1. USE [db_soldadura]
  2. GO
  3. /****** Object:  Table [dbo].[tb_usuarios]    Script Date: 06/12/2013 14:37:52 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. SET ANSI_PADDING ON
  9. GO
  10. CREATE TABLE [dbo].[tb_usuarios](
  11.     [id_usuario] [INT] IDENTITY(1,1) NOT NULL,
  12.     [Numero_Usuario] [VARCHAR](50) NULL,
  13.     [Password_Usuario] [VARCHAR](50) NULL,
  14.     [tipo] [VARCHAR](50) NULL,
  15.     [Nombre_Usuario] [VARCHAR](50) NULL,
  16.  CONSTRAINT [PK_tb_usuarios] PRIMARY KEY CLUSTERED
  17. (
  18.     [id_usuario] ASC
  19. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  20. ) ON [PRIMARY]
  21. GO
  22. SET ANSI_PADDING OFF
  23. GO
  24. SET IDENTITY_INSERT [dbo].[tb_usuarios] ON
  25. INSERT [dbo].[tb_usuarios] ([id_usuario], [Numero_Usuario], [Password_Usuario], [tipo], [Nombre_Usuario]) VALUES (19, N'612468', N'123', N'OPERADOR', N'Marcelino Diaz')
  26. INSERT [dbo].[tb_usuarios] ([id_usuario], [Numero_Usuario], [Password_Usuario], [tipo], [Nombre_Usuario]) VALUES (20, N'550948', N'123', N'OPERADOR', N'Fernando Jimenez')
  27. INSERT [dbo].[tb_usuarios] ([id_usuario], [Numero_Usuario], [Password_Usuario], [tipo], [Nombre_Usuario]) VALUES (22, N'550421', N'0615', N'ADMIN', N'Victor del Angel')
  28. INSERT [dbo].[tb_usuarios] ([id_usuario], [Numero_Usuario], [Password_Usuario], [tipo], [Nombre_Usuario]) VALUES (23, N'640462', N'4589', N'ADMIN', N'Samuel Perez')
  29. INSERT [dbo].[tb_usuarios] ([id_usuario], [Numero_Usuario], [Password_Usuario], [tipo], [Nombre_Usuario]) VALUES (24, N'551726', N'1873', N'OPERADOR', N'Jose Mario Garcia')
  30. INSERT [dbo].[tb_usuarios] ([id_usuario], [Numero_Usuario], [Password_Usuario], [tipo], [Nombre_Usuario]) VALUES (25, N'634041', N'123', N'OPERADOR', N'Daniel Diaz Martinez')
  31. INSERT [dbo].[tb_usuarios] ([id_usuario], [Numero_Usuario], [Password_Usuario], [tipo], [Nombre_Usuario]) VALUES (26, N'611721', N'123', N'OPERADOR', N'Adolfo Martinez Avila')
  32. INSERT [dbo].[tb_usuarios] ([id_usuario], [Numero_Usuario], [Password_Usuario], [tipo], [Nombre_Usuario]) VALUES (36, N'1', N'admin', N'TOTAL', N'ADMIN TOTAL')
  33. INSERT [dbo].[tb_usuarios] ([id_usuario], [Numero_Usuario], [Password_Usuario], [tipo], [Nombre_Usuario]) VALUES (42, N'02', N'123', NULL, N'Avelino Gutierrez')
  34. SET IDENTITY_INSERT [dbo].[tb_usuarios] OFF
  35. /****** Object:  Table [dbo].[tb_escaneosSalida]    Script Date: 06/12/2013 14:37:52 ******/
  36. SET ANSI_NULLS ON
  37. GO
  38. SET QUOTED_IDENTIFIER ON
  39. GO
  40. SET ANSI_PADDING ON
  41. GO
  42. CREATE TABLE [dbo].[tb_escaneosSalida](
  43.     [id_escaneosSalida] [INT] IDENTITY(1,1) NOT NULL,
  44.     [num_escaneos] [INT] NULL,
  45.     [id_usuario] [INT] NULL,
  46.     [id_contenedor] [INT] NULL,
  47.     [Fecha_Escaneo] [VARCHAR](50) NULL,
  48.     [fifo] [INT] NULL,
  49.     [fecha] [datetime] NULL,
  50.  CONSTRAINT [PK_tb_escaneosSalida] PRIMARY KEY CLUSTERED
  51. (
  52.     [id_escaneosSalida] ASC
  53. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  54. ) ON [PRIMARY]
  55. GO
  56. SET ANSI_PADDING OFF
  57. GO
  58. SET IDENTITY_INSERT [dbo].[tb_escaneosSalida] ON
  59. INSERT [dbo].[tb_escaneosSalida] ([id_escaneosSalida], [num_escaneos], [id_usuario], [id_contenedor], [Fecha_Escaneo], [fifo], [fecha]) VALUES (66, 1, 16, 828, N'5/23/2013 07:36:01 AM', NULL, NULL)
  60. INSERT [dbo].[tb_escaneosSalida] ([id_escaneosSalida], [num_escaneos], [id_usuario], [id_contenedor], [Fecha_Escaneo], [fifo], [fecha]) VALUES (67, 1, 16, 823, N'5/23/2013 08:17:42 AM', 1, NULL)
  61. INSERT [dbo].[tb_escaneos] ([id_escaneos], [num_escaneos], [id_usuario], [id_contenedor], [Fecha_Escaneo], [fifo], [fecha]) VALUES (149, 1, 36, 822, N'5/30/2013 02:55:43 PM', 1, NULL)
  62. SET IDENTITY_INSERT [dbo].[tb_escaneos] OFF
  63. /****** Object:  ForeignKey [FK_tb_escaneos_tb_contenedor_vigente]    Script Date: 06/12/2013 14:37:52 ******/
  64. ALTER TABLE [dbo].[tb_escaneos]  WITH CHECK ADD  CONSTRAINT [FK_tb_escaneos_tb_contenedor_vigente] FOREIGN KEY([id_contenedor])
  65. REFERENCES [dbo].[tb_contenedor_vigente] ([id_contenedor])
  66. GO
  67. ALTER TABLE [dbo].[tb_escaneos] CHECK CONSTRAINT [FK_tb_escaneos_tb_contenedor_vigente]
  68. GO

Última edición por gnzsoloyo; 12/06/2013 a las 13:55
  #9 (permalink)  
Antiguo 12/06/2013, 13:52
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Inner Join Me Multiplica los Resultados de 2 Tablas

con los datos que me das y ejecutando tu query me sale esto:

19 Marcelino Diaz NULL NULL
20 Fernando Jimenez NULL NULL
22 Victor del Angel NULL NULL
23 Samuel Perez NULL NULL
24 Jose Mario Garcia NULL NULL
25 Daniel Diaz Martinez NULL NULL
26 Adolfo Martinez Avila NULL NULL
36 ADMIN TOTAL 1 NULL
42 Avelino Gutierrez NULL NULL
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 12/06/2013 a las 13:58

Etiquetas: basic.net, sql, sql-server-2008, visual, visual.net
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:05.