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

Consulta con LEFT OUTER JOIN no devuelve los valores esperados

Estas en el tema de Consulta con LEFT OUTER JOIN no devuelve los valores esperados en el foro de SQL Server en Foros del Web. Buenos días compañeros. Tengo un problemita y espero puedan ayudarme. Tengo una tabla(TABLA A) que esta compuesta por 3 campos (DATE, TERRY, PRODUCT) y en ...
  #1 (permalink)  
Antiguo 05/04/2012, 10:42
 
Fecha de Ingreso: abril-2012
Ubicación: Caracas
Mensajes: 4
Antigüedad: 12 años
Puntos: 0
Consulta con LEFT OUTER JOIN no devuelve los valores esperados

Buenos días compañeros.

Tengo un problemita y espero puedan ayudarme.

Tengo una tabla(TABLA A) que esta compuesta por 3 campos (DATE, TERRY, PRODUCT)
y en otra tabla(TABLA B) tengo la informacion de la ganancia generada por cada producto, en su territorio para un periodo o mes especifico; ademas de muchos otros datos que no vienen al caso.

La cosa esta en que a veces un territorio no genera ganancia para un producto y por supuesto no se especifica en la TABLA B. Sin embargo yo necesito que, si no existe el registro en la TABLA B, me devuelva un 0 en la consulta.

La consulta que he fabricado para este caso es la siguiente:

SELECT DATE, TERRY, PRODUCT, SUM(GANANCIA)
FROM TABLA_A LEFT JOIN TABLA_B C
ON C.PRD_END_DT = DATE AND C.SALES_TERRY_CD = TERRY AND C.P_SAP = PRODUCT
GROUP BY DATE, TERRY, PRODUCT

El problema es que este query solo retorna los valores que coincidan de la TABLA A con los de la TABLA B, cuando segun entiendo; la sentencia LEFT OUTER JOIN retorna todos los valores contenidos en la tabla de la izquierda y solo los que concuerden de la tabla de la derecha.

La Tabla A esta estructurada mas o menos de la siguiente manera:

DATE------- TERRY -- PRODUCT
01-2011--- 1-------- A
01-2011--- 1-------- B
01-2011--- 1-------- C

Y la consulta que fabrique devuelve lo siguiente:

DATE------- TERRY -- PRODUCT----Ganancia
01-2011--- 1-------- A--------------10
01-2011--- 1-------- B--------------20


Espero haberme explicado y de antemano, gracias por su ayuda.

Última edición por freddysimondelgado; 05/04/2012 a las 10:48
  #2 (permalink)  
Antiguo 05/04/2012, 11:12
Avatar de ramirezmario7  
Fecha de Ingreso: febrero-2008
Ubicación: Medellín
Mensajes: 336
Antigüedad: 16 años, 2 meses
Puntos: 56
Respuesta: Consulta con LEFT OUTER JOIN no devuelve los valores esperados

Hola.
Prueba con inner join.
__________________
Mario Ramírez
Desarrollador .NET MCTS
https://www.mcpvirtualbusinesscard.c...nteractivecard
  #3 (permalink)  
Antiguo 05/04/2012, 12:00
 
Fecha de Ingreso: abril-2012
Ubicación: Caracas
Mensajes: 4
Antigüedad: 12 años
Puntos: 0
Respuesta: Consulta con LEFT OUTER JOIN no devuelve los valores esperados

Hola.
Gracias por tu ayuda,.

Ya he intentado con inner join y se comporta de la misma manera.

Saludos.!
  #4 (permalink)  
Antiguo 05/04/2012, 21:23
Avatar de ramirezmario7  
Fecha de Ingreso: febrero-2008
Ubicación: Medellín
Mensajes: 336
Antigüedad: 16 años, 2 meses
Puntos: 56
Respuesta: Consulta con LEFT OUTER JOIN no devuelve los valores esperados

Hola.
Podrias copiar como quiere que te muestre la consulta, ahi muestras dos tablas pero muestra como es que quieres la consulta para saber como hacerla.

Tienes estas dos tablas

DATE------- TERRY -- PRODUCT
01-2011--- 1-------- A
01-2011--- 1-------- B
01-2011--- 1-------- C


DATE------- TERRY -- PRODUCT----Ganancia
01-2011--- 1-------- A--------------10
01-2011--- 1-------- B--------------20

muestra con estas dos tablas que datos es que necesitas.

dopronto lo que quieres es algo asi.

DATE------- TERRY -- PRODUCT----Ganancia
01-2011--- 1-------- A---------------10
01-2011--- 1-------- B---------------20
01-2011--- 1-------- C---------------0

es esto lo que buscas.
__________________
Mario Ramírez
Desarrollador .NET MCTS
https://www.mcpvirtualbusinesscard.c...nteractivecard
  #5 (permalink)  
Antiguo 05/04/2012, 21:34
Avatar de ramirezmario7  
Fecha de Ingreso: febrero-2008
Ubicación: Medellín
Mensajes: 336
Antigüedad: 16 años, 2 meses
Puntos: 56
Respuesta: Consulta con LEFT OUTER JOIN no devuelve los valores esperados

Mira este ejemplo si te sirve.

Código:
create table TABLA_A
(
    id int identity not null primary key,
	[date] varchar(7),
	terry int,
	product varchar(4) 
)

create table TABLA_B
(
id int identity not null primary key,
	[date] varchar(7),
	terry int,
	product varchar(4),
	ganancia int 
)

insert into TABLA_A values('01-2011',1,'A')
insert into TABLA_A values('01-2011',1,'B')
insert into TABLA_A values('01-2011',1,'C')

insert into TABLA_B values('01-2011',1,'A',10)
insert into TABLA_B values('01-2011',1,'B',20)

SELECT
	A.[date],A.terry,A.product,
	ISNULL(B.ganancia,0) AS GANANCIA
FROM
	TABLA_A A
LEFT JOIN
	TABLA_B B
ON
	A.[date] = B.[date] AND
	A.terry = B.terry AND
	A.product = B.product
me rotorna este resultado

date terry product ganancia
01-2011 1 A 10
01-2011 1 B 20
01-2011 1 C 0
__________________
Mario Ramírez
Desarrollador .NET MCTS
https://www.mcpvirtualbusinesscard.c...nteractivecard
  #6 (permalink)  
Antiguo 09/04/2012, 07:29
 
Fecha de Ingreso: abril-2012
Ubicación: Caracas
Mensajes: 4
Antigüedad: 12 años
Puntos: 0
Respuesta: Consulta con LEFT OUTER JOIN no devuelve los valores esperados

Hola ramirezmario, muchas gracias por tu colaboracion.

Efectivamente el ejemplo que colocaste anteriormente funciona tal cual como lo necesito..

Si te fijas, el query que yo realice es muy parecido al que colocaste en el ejemplo.


SELECT
DATE, TERRY, PRODUCT, SUM(GANANCIA)
FROM
TABLA_A
LEFT JOIN
TABLA_B C
ON
C.PRD_END_DT = DATE AND
C.SALES_TERRY_CD = TERRY AND
C.P_SAP = PRODUCT
GROUP
BY DATE, TERRY, PRODUCT

Y aun asi no me funciona..
De nuevo gracias.
Saludos
  #7 (permalink)  
Antiguo 09/04/2012, 08:24
Avatar de ramirezmario7  
Fecha de Ingreso: febrero-2008
Ubicación: Medellín
Mensajes: 336
Antigüedad: 16 años, 2 meses
Puntos: 56
Respuesta: Consulta con LEFT OUTER JOIN no devuelve los valores esperados

Hola.
Si puedes muestra toda la estructura de tus dos tablas cuales son las primary key y los forein key para saber que esta faltando
__________________
Mario Ramírez
Desarrollador .NET MCTS
https://www.mcpvirtualbusinesscard.c...nteractivecard

Etiquetas: devuelve, join, left, outer, registro, select, tabla, campos
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 03:21.