Ver Mensaje Individual
  #23 (permalink)  
Antiguo 10/02/2016, 14:05
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 5 meses
Puntos: 774
Respuesta: extraer solo los usuarios que no hayan cancelado un mes

La forma manual:

Código SQL:
Ver original
  1. INSERT INTO cuentas VALUES (1,1,50)
  2. INSERT INTO cuentas VALUES (1,2,100)
  3. INSERT INTO cuentas VALUES (1,3,50)
  4. INSERT INTO cuentas VALUES (1,4,50)
  5. INSERT INTO cuentas VALUES (1,5,100)
  6. INSERT INTO cuentas VALUES (1,6,50)
  7. INSERT INTO cuentas VALUES (1,7,50)
  8. INSERT INTO cuentas VALUES (1,8,100)
  9. INSERT INTO cuentas VALUES (1,9,50)
  10. INSERT INTO cuentas VALUES (1,10,50)
  11. INSERT INTO cuentas VALUES (1,11,100)
  12. INSERT INTO cuentas VALUES (1,12,50)

Y la forma automatica:

Código SQL:
Ver original
  1. --insertamos los meses del año para 2016
  2. INSERT INTO cuentas
  3. SELECT completa.* FROM(
  4. SELECT id_cliente, id_year_month,50 AS monto  FROM(
  5. SELECT t1.id AS id_cliente, t1.nombre,t2.id AS id_year_month, id_year, id_mont  FROM clientes AS t1,
  6. years_months AS t2) AS t2
  7. LEFT JOIN years AS t3 ON (t2.id_year=t3.id)
  8. WHERE t3.years=2016 --and t2.nombre='Libras3'
  9. ) AS completa
  10. LEFT JOIN cuentas AS t4 ON (completa.id_cliente=t4.id_cliente AND completa.id_year_month=t4.years_months)
  11. WHERE t4.id IS NULL

Que hace la consulta, bueno....primero obtenemos un producto cartesiano de los clientes con la tabla year_months(producto cartesiano: por cada renglon de years_months tendremos uno para clientes), con esos datos ahora obtenemos el año(para tener 12 meses para cada año) ya teniendo esta informacion podemos unirla a la tbala de cuentas, para saber que cliente ya esta dado de alta para cierto año, los que no esten dados de alta se insertaran :)

P.D: No naci sabiendo SQL server ha sido de poco a poco ir aprendiendo cosas nuevas....y sigo aprendiendo ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me