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

Obtener registros que no cumplen con la condicion del select

Estas en el tema de Obtener registros que no cumplen con la condicion del select en el foro de SQL Server en Foros del Web. Hola, estoy intentando resolver una consulta algo compleja, la misma deberia devolverme registros que cumplen con el SELECT, pero además quisiera que me devuelva tambien ...
  #1 (permalink)  
Antiguo 29/10/2010, 11:56
 
Fecha de Ingreso: septiembre-2009
Ubicación: Uruguay
Mensajes: 11
Antigüedad: 15 años, 1 mes
Puntos: 0
Obtener registros que no cumplen con la condicion del select

Hola, estoy intentando resolver una consulta algo compleja, la misma deberia devolverme registros que cumplen con el SELECT, pero además quisiera que me devuelva tambien otros que no cumplen, indicando un 0 en la columna que corresponda.

La siguiente consulta me devuelve los datos de las personas que tienen DEUDA, pero además quisiera que me listara datos de las personas que no tiene deuda, o mejor dicho que la deuda es 0, estos NO se encuentran en la tabla ADM_VALES.

El resultado deberia ser algo asi

funcionario / socio / nombre / deuda

500 / 230 / daniel / 1500.00
542 / 298 / santiago/ 0.00

Código:
SELECT
	T.FUNCIONARIO,
	T.SOCIO,
	T.NOMBRE,
	ISNULL(ROUND(SUM(VALES.IMPORTE),2),0) as DEUDA
FROM
	AF_SOCIOS_ACTIVOS T,
	AF_SOCIOS_ACTIVOS R,
	ADM_VALES VALES
WHERE
	 ((T.CONVENIO = 195 AND R.CONVENIO = 197 AND R.FUNCIONARIO = T.FUNCIONARIO) OR
	  (T.CONVENIO = 195 AND R.CONVENIO = 195 AND R.FUNCIONARIO= T.FUNCIONARIO)) AND
	  (VALES.SOCIO = R.SOCIO AND VALES.ESTADO='V') 
GROUP BY
	T.FUNCIONARIO,
	T.SOCIO,
	T.NOMBRE
ORDER BY
	T.FUNCIONARIO

Se agradece la colaboracion.

si es necesario brindar mas informacion solo avisen, estaré pendiente de este tema.

GRACIAS
  #2 (permalink)  
Antiguo 29/10/2010, 12:50
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Obtener registros que no cumplen con la condicion del select

Buenas tardes dalves:

Hay varias observaciones que tengo que hacer a tu consulta:

Primero, no es recomendable que relaciones tus tablas así:

Código SQL:
Ver original
  1. FROM
  2. AF_SOCIOS_ACTIVOS T,    AF_SOCIOS_ACTIVOS R, ADM_VALES VALES
  3. ......
  4. WHERE
  5. R.FUNCIONARIO = T.FUNCIONARIO AND
  6. R.FUNCIONARIO= T.FUNCIONARIO AND
  7. VALES.SOCIO = R.SOCIO

Este tipo de uniones afecta considerablemente en el performanse de la consulta. En lugar de hacer esto utiliza la cláusula JOIN (puedes leer más acerca de este tema en
http://es.wikipedia.org/wiki/Join.

Ahora bien, el tipo de unión que estás utilizando sirve para listar elementos que se encuentran en las dos tablas que estás relacionando (sería el equivalente al INNER JOIN). Dado que tú necesitas mostrar elementos que no necesariamente se encuentran en tu tabla ADM_VALES es necesario que utilices un LEFT JOIN o un RIGHT JOIN, dale un vistazo a la liga que puse arriba para que veas cómo es que funcionan cada uno de ellos.

De tal manera que tu consulta debería quedar más o menos así:

Código SQL:
Ver original
  1. FROM AF_SOCIOS_ACTIVOS T
  2. INNER JOIN ON AF_SOCIOS_ACTIVOS R
  3. ON R.FUNCIONARIO = T.FUNCIONARIO
  4. LEFT JOIN ADM_VALES VALES
  5. ON  VALES.SOCIO = R.SOCIO AND VALES.ESTADO='V'
  6. WHERE
  7. T.CONVENIO = 195 AND R.CONVENIO = 197 OR
  8. T.CONVENIO = 195 AND R.CONVENIO = 195

Saludos y si continuas con problemas lo comentas en el foro para tratar de ayudarte
Leo.

Etiquetas: nulos, query
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 23:17.