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

Conteo Complicado SQLServer

Estas en el tema de Conteo Complicado SQLServer en el foro de SQL Server en Foros del Web. Buenos Dias Expertos, Tengo un problemita que espero me puedan echar la mano con el. de antemano gracias solo por el hecho de echarle un ...
  #1 (permalink)  
Antiguo 03/09/2012, 13:18
 
Fecha de Ingreso: septiembre-2004
Ubicación: Hermosillo, Sonora, Mexico
Mensajes: 28
Antigüedad: 19 años, 7 meses
Puntos: 0
Conteo Complicado SQLServer

Buenos Dias Expertos, Tengo un problemita que espero me puedan echar la mano con el. de antemano gracias solo por el hecho de echarle un vistazo.
tengo la siguiente seleccion que necesito me arroje simplemente un numero.

SELECT COUNT (DISTINCT EXPEDIENTE) AS TOTAL
FROM Tabla
WHERE (fecha1 BETWEEN '01/01/2012' AND '30/06/2012')AND (fecha2 BETWEEN '01/01/2012' AND '30/06/2012') AND (clavedel BETWEEN '847501' AND '847808') AND (clavejuz = '050401') AND (fecha3<> '1800-01-01')

el problema eske puedo tener varios casos y en cada caso debe ser diferente el resultado segun la clavejuz(050401 y 110402)

1er CASO : con la clave 050401 mi tabla contiene 3 resultados ya que el expediente se repite 3 veces.

2do CASO: con la clave 110402 mi tabla contiene solo 1 resultado, el expediente solo existe una vez.

Entonces

el segundo caso me arroja el resultado correcto que es "1".
el primer caso me arroja tambien 1 ya que uno de los 3 si cumple con la condicion, pero en este caso yo kiero ke NO me lo cuente , como puedo hacerle para ke me omita este conteo en solo el primer caso.. espero haber sido claro en mi explicacion de lo contrario aki estoy a sus ordenes.. gracias y espero puedan ayudarme GRACIAS !!.
__________________
:aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso:

Chino4Loves: agradezco de verdad tu ayuda

:arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba:
  #2 (permalink)  
Antiguo 03/09/2012, 13:59
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: Conteo Complicado SQLServer

¿Cual seria la CONDICION por la cual NO DEBERIA CONTAR?
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 03/09/2012, 16:36
 
Fecha de Ingreso: diciembre-2011
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: Conteo Complicado SQLServer

Me parece que lo que tendrías q comprobar una vez q obtienes una respuesta, digamos X, que la cantidad de EXPEDIENTE con ese id se repite exactamente X-veces.

o sea, para tu primer caso (050401) como la consulta te devolvió 1, compruebas en otra consulta q el expediente 050401 solo existe una vez y si no es así es pq existe una instancia del mismo q no cumple la condición del where.


Espero q esta sea la solución q buscabas. Saludos.
  #4 (permalink)  
Antiguo 04/09/2012, 08:23
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: Conteo Complicado SQLServer

y si pones un case?

case when expediente=050401 then count(1) else count(0) end as total :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 04/09/2012, 10:02
 
Fecha de Ingreso: septiembre-2004
Ubicación: Hermosillo, Sonora, Mexico
Mensajes: 28
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: Conteo Complicado SQLServer

iislas Respuesta: Conteo Complicado SQLServer

--------------------------------------------------------------------------------
¿Cual seria la CONDICION por la cual NO DEBERIA CONTAR?


CLAVE EXP FECHA1 FECHA2


110402 59 10/08/2012 07/08/2012


050401 54 08/08/2012 06/08/2012
54 08/08/2012
54 08/08/2012




EL CASO CON CLAVE 110402 ( lo cuenta 1 porque tiene ambas fechas)
EL CASO CON CLAVE 050401 ( lo debiera de contar tambien una vez, solo si cumplieran igual que el caso 1 que ambas fechas se cumplieran en los 3 casos, si no se cumplen las 3 no lo kiero contar aunque se cumpla en solo una de ellas.

no se si me explike, espero les kede un poco mas claro lo ke deseo
muchas gracias
__________________
:aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso:

Chino4Loves: agradezco de verdad tu ayuda

:arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba:
  #6 (permalink)  
Antiguo 04/09/2012, 10:30
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: Conteo Complicado SQLServer

creo que tu error es en los parentesis:

Quieres que cuente cuando cumpla con las 2 condiciones de fecha? entonces hacemos esto:

((fecha1 BETWEEN '01/01/2012' AND '30/06/2012') AND (fecha2 BETWEEN '01/01/2012' AND '30/06/2012') AND (fecha3<> '1800-01-01') ) AND (clavedel BETWEEN '847501' AND '847808') AND (clavejuz = '050401')

prueba y nos dices :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 04/09/2012, 10:37
 
Fecha de Ingreso: septiembre-2004
Ubicación: Hermosillo, Sonora, Mexico
Mensajes: 28
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: Conteo Complicado SQLServer

Cita:
Iniciado por Libras Ver Mensaje
creo que tu error es en los parentesis:

Quieres que cuente cuando cumpla con las 2 condiciones de fecha? entonces hacemos esto:

((fecha1 BETWEEN '01/01/2012' AND '30/06/2012') AND (fecha2 BETWEEN '01/01/2012' AND '30/06/2012') AND (fecha3<> '1800-01-01') ) AND (clavedel BETWEEN '847501' AND '847808') AND (clavejuz = '050401')

prueba y nos dices :)

ke tal !! lo ke pasa que cuando cumple con ambas condiciones de fecha si me la cuenta !!. pero me la cuenta correctamente cuando el expediente existe solo una vez!! cuando el expediente existe mas de una vez y en solo una de las veces se cumple la condicion de ambas fechas entonces ahi NO kiero ke me lo cuenta para efectos de mi resultado!!
__________________
:aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso:

Chino4Loves: agradezco de verdad tu ayuda

:arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba:
  #8 (permalink)  
Antiguo 04/09/2012, 10:50
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: Conteo Complicado SQLServer

y porque no usas un case?? puedes poner un ejemplo de tus datos??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 05/09/2012, 11:08
 
Fecha de Ingreso: septiembre-2004
Ubicación: Hermosillo, Sonora, Mexico
Mensajes: 28
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: Conteo Complicado SQLServer

Cita:
Iniciado por libras Ver Mensaje
y porque no usas un case?? Puedes poner un ejemplo de tus datos??


juz exp año inc fec1 fec2 fec3
110402 59 2012 mario 08/06/2012 ------------- 01/06/2012

mi condicion es si tiene una fec1 y una fec3 se cataloga como "a" pero en este caso el exp solo existe una vez.


Juz---exp-año-- inc----- fec1------- fec2------- fec3
50400 54 2012 maria 18/02/2012 ------------ 21/02/2012
50400 54 2012 jesus -------------- ---------- 21/02/2012
50400 54 2012 jose -------------- ----------- 21/02/2012

mi condicion aki es la misma , si tiene fec1 y fec3 se catalogaria como "a" pero en este caso el exp existe 3 veces , entonces si existe mas de una vez y solo una no cuenta con las condiciones de fec1 y fec2, entonces ya no es "a" ahora se cataloga como"b"

lo que yo busco es que me arroje solo los numeros (que me cuente)
__________________
:aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso:

Chino4Loves: agradezco de verdad tu ayuda

:arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba:
  #10 (permalink)  
Antiguo 05/09/2012, 11:44
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: Conteo Complicado SQLServer

en los datos que pones ningun registro tiene fec2 esta bien eso??

porque con esos datos puedes sacar esto:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. juz VARCHAR(20),
  4. EXP INT,
  5. [año] INT,
  6. inc VARCHAR(20),
  7. fec1 datetime,
  8. fec2 datetime,
  9. fec3 datetime
  10. )
  11.  
  12. INSERT INTO #temp VALUES ('110402',59,2012,'mario','06/08/2012','06/30/2012','06/01/2012')
  13. INSERT INTO #temp VALUES ('50400',54,2012,'maria','02/18/2012','06/30/2012','02/21/2012')
  14. INSERT INTO #temp VALUES ('50400',54,2012,'jesus',NULL,NULL,'02/21/2012')
  15. INSERT INTO #temp VALUES ('50400',54,2012,'jose',NULL,NULL,'02/21/2012')
  16.  
  17.  
  18. SELECT COUNT(*),EXP FROM #temp
  19. WHERE (fec1 BETWEEN '01/01/2012' AND '06/30/2012') AND
  20. (fec3 BETWEEN '01/01/2012' AND '06/30/2012') AND (fec3<> '1800-01-01')  
  21.  
  22. --AND (clavedel BETWEEN '847501' AND '847808')
  23. --AND (juz = '50400')
  24. GROUP BY EXP

y cuenta nada mas un registro por exp ya que solo 1 registro cumple con las 2 condiciones ahora no se donde esta el problema, digo jugue un poco con tus datos y obtengo lo que necesitas no???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 05/09/2012, 12:14
 
Fecha de Ingreso: septiembre-2004
Ubicación: Hermosillo, Sonora, Mexico
Mensajes: 28
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: Conteo Complicado SQLServer

Cita:
Iniciado por libras Ver Mensaje
en los datos que pones ningun registro tiene fec2 esta bien eso??

Porque con esos datos puedes sacar esto:

Código sql:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. juz VARCHAR(20),
  4. EXP INT,
  5. [año] INT,
  6. inc VARCHAR(20),
  7. fec1 datetime,
  8. fec2 datetime,
  9. fec3 datetime
  10. )
  11.  
  12. INSERT INTO #temp VALUES ('110402',59,2012,'mario','06/08/2012','06/30/2012','06/01/2012')
  13. INSERT INTO #temp VALUES ('50400',54,2012,'maria','02/18/2012','06/30/2012','02/21/2012')
  14. INSERT INTO #temp VALUES ('50400',54,2012,'jesus',NULL,NULL,'02/21/2012')
  15. INSERT INTO #temp VALUES ('50400',54,2012,'jose',NULL,NULL,'02/21/2012')
  16.  
  17.  
  18. SELECT COUNT(*),EXP FROM #temp
  19. WHERE (fec1 BETWEEN '01/01/2012' AND '06/30/2012') AND
  20. (fec3 BETWEEN '01/01/2012' AND '06/30/2012') AND (fec3<> '1800-01-01')  
  21.  
  22. --and (clavedel between '847501' and '847808')
  23. --and (juz = '50400')
  24. GROUP BY EXP

y cuenta nada mas un registro por exp ya que solo 1 registro cumple con las 2 condiciones ahora no se donde esta el problema, digo jugue un poco con tus datos y obtengo lo que necesitas no???

estoy de acuerdo, vamos a verlo asi, supongamos que tenemos la misma clave juz = 50400,,, pero en esa clave hay muchos exp,, entonces si un expediente solo tiene un registro y cumple con las condiciones de las 2 fechas, entonces que me lo cuente como 1,,,, pero si un exp tiene 2 o mas registros, (porque se puede dar el caso) y si un registro de este exp, cumple con las condiciones de las 2 fechas tambien me lo cuenta como 1, pero no kiero ke lo haga, es decir, todos los registros del exp deben de cumplir con las condiciones para contarmelo como 1, de lo contrario , con uno registro que no cumpla con las condiciones entonces es 0, no me lo cuenta
No se si me este explicando, disculpa!!
Muchisimas gracias por tu tiempo y ayuda!!
__________________
:aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso:

Chino4Loves: agradezco de verdad tu ayuda

:arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba:

Última edición por chino4loves; 05/09/2012 a las 12:31
  #12 (permalink)  
Antiguo 05/09/2012, 12:42
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: Conteo Complicado SQLServer

a ver si entendi:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. juz VARCHAR(20),
  4. EXP INT,
  5. [año] INT,
  6. inc VARCHAR(20),
  7. fec1 datetime,
  8. fec2 datetime,
  9. fec3 datetime
  10. )
  11.  
  12. INSERT INTO #temp VALUES ('110402',59,2012,'mario','06/08/2012','06/30/2012','06/01/2012')
  13. INSERT INTO #temp VALUES ('50400',54,2012,'maria','02/18/2012','06/30/2012','02/21/2012')
  14. INSERT INTO #temp VALUES ('50400',54,2012,'jesus',NULL,NULL,'02/21/2012')
  15. INSERT INTO #temp VALUES ('50400',54,2012,'jose',NULL,NULL,'02/21/2012')
  16. INSERT INTO #temp VALUES ('50400',54,2012,'Libras','02/18/2012',NULL,'02/21/2012')
  17. INSERT INTO #temp VALUES ('50400',56,2012,'Libras','02/18/2012',NULL,'02/21/2012')
  18. INSERT INTO #temp VALUES ('50400',56,2012,'Libras','02/18/2012',NULL,'02/21/2012')
  19.  
  20.  
  21. SELECT EXP FROM #temp
  22. WHERE (fec1 BETWEEN '01/01/2012' AND '06/30/2012') AND
  23. (fec3 BETWEEN '01/01/2012' AND '06/30/2012') AND (fec3<> '1800-01-01')  
  24. AND EXP IN (
  25.  
  26. SELECT t1.EXP FROM
  27. (SELECT COUNT(*) total, EXP FROM #temp GROUP BY EXP) t1
  28. INNER JOIN (SELECT COUNT(*) total , EXP FROM #temp
  29. WHERE (fec1 BETWEEN '01/01/2012' AND '06/30/2012') AND
  30. (fec3 BETWEEN '01/01/2012' AND '06/30/2012')
  31.  GROUP BY EXP) t2 ON t1.EXP=t2.EXP
  32. WHERE t1.total=t2.total
  33.  
  34.  
  35. )
  36. GROUP BY EXP

tenemos esos datos entonces segun la logica que planteas deberia de regresar el exp 59 y el 56 el 54 no deberia de contarlo porque aunque cumple con las condiciones de fechas(en 2 casos) el total de registros es de 4 y no todas cumplen con la condicion por el contrario el registro 56 deberia de contarlo como 1 porque aunque aparece 2 veces las 2 veces cumple con la condicion, right???
__________________
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; 05/09/2012 a las 12:51
  #13 (permalink)  
Antiguo 05/09/2012, 13:01
 
Fecha de Ingreso: septiembre-2004
Ubicación: Hermosillo, Sonora, Mexico
Mensajes: 28
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: Conteo Complicado SQLServer

Cita:
Iniciado por libras Ver Mensaje
a ver si entendi:

Código sql:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. juz VARCHAR(20),
  4. EXP INT,
  5. [año] INT,
  6. inc VARCHAR(20),
  7. fec1 datetime,
  8. fec2 datetime,
  9. fec3 datetime
  10. )
  11.  
  12. INSERT INTO #temp VALUES ('110402',59,2012,'mario','06/08/2012','06/30/2012','06/01/2012')
  13. INSERT INTO #temp VALUES ('50400',54,2012,'maria','02/18/2012','06/30/2012','02/21/2012')
  14. INSERT INTO #temp VALUES ('50400',54,2012,'jesus',NULL,NULL,'02/21/2012')
  15. INSERT INTO #temp VALUES ('50400',54,2012,'jose',NULL,NULL,'02/21/2012')
  16. INSERT INTO #temp VALUES ('50400',54,2012,'libras','02/18/2012',NULL,'02/21/2012')
  17. INSERT INTO #temp VALUES ('50400',56,2012,'libras','02/18/2012',NULL,'02/21/2012')
  18. INSERT INTO #temp VALUES ('50400',56,2012,'libras','02/18/2012',NULL,'02/21/2012')
  19.  
  20.  
  21. SELECT EXP FROM #temp
  22. WHERE (fec1 BETWEEN '01/01/2012' AND '06/30/2012') AND
  23. (fec3 BETWEEN '01/01/2012' AND '06/30/2012') AND (fec3<> '1800-01-01')  
  24. AND EXP IN (
  25.  
  26. SELECT t1.EXP FROM
  27. (SELECT COUNT(*) total, EXP FROM #temp GROUP BY EXP) t1
  28. INNER JOIN (SELECT COUNT(*) total , EXP FROM #temp
  29. WHERE (fec1 BETWEEN '01/01/2012' AND '06/30/2012') AND
  30. (fec3 BETWEEN '01/01/2012' AND '06/30/2012')
  31.  GROUP BY EXP) t2 ON t1.EXP=t2.EXP
  32. WHERE t1.total=t2.total
  33.  
  34.  
  35. )
  36. GROUP BY EXP

tenemos esos datos entonces segun la logica que planteas deberia de regresar el exp 59 y el 56 el 54 no deberia de contarlo porque aunque cumple con las condiciones de fechas(en 2 casos) el total de registros es de 4 y no todas cumplen con la condicion por el contrario el registro 56 deberia de contarlo como 1 porque aunque aparece 2 veces las 2 veces cumple con la condicion, right???



afirmativo, es correcto, es lo ke deseo!! Esta bien si pongo un select count (distinct exp) para que me arroje solo los numeros
__________________
:aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso:

Chino4Loves: agradezco de verdad tu ayuda

:arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba:
  #14 (permalink)  
Antiguo 05/09/2012, 13:04
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: Conteo Complicado SQLServer

el query final solo te arroja los numeros

exp
56
59

y como tienes el group by al final ya no necesitas el distinct :)


Código SQL:
Ver original
  1. SELECT COUNT(DISTINCT(EXP)),EXP FROM #temp
  2. WHERE (fec1 BETWEEN '01/01/2012' AND '06/30/2012') AND
  3. (fec3 BETWEEN '01/01/2012' AND '06/30/2012') AND (fec3<> '1800-01-01')  
  4. AND EXP IN (
  5.  
  6. SELECT t1.EXP FROM
  7. (SELECT COUNT(*) total, EXP FROM #temp GROUP BY EXP) t1
  8. INNER JOIN (SELECT COUNT(*) total , EXP FROM #temp
  9. WHERE (fec1 BETWEEN '01/01/2012' AND '06/30/2012') AND
  10. (fec3 BETWEEN '01/01/2012' AND '06/30/2012')
  11.  GROUP BY EXP) t2 ON t1.EXP=t2.EXP
  12. WHERE t1.total=t2.total
  13.  
  14.  
  15. )
  16. GROUP BY EXP

aunque para que necesitas los numeros?? porque segun tu logica siempre seria 1 no???


saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #15 (permalink)  
Antiguo 05/09/2012, 13:28
 
Fecha de Ingreso: septiembre-2004
Ubicación: Hermosillo, Sonora, Mexico
Mensajes: 28
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: Conteo Complicado SQLServer

Código SQL:
Ver original
  1. SELECT     dbo.inculpado.EXP
  2. FROM       dbo.Inculpado INNER JOIN
  3.            dbo.Radicacion ON dbo.Inculpado.Llave = dbo.Radicacion.Llave INNER JOIN
  4.            dbo.Resolucion ON dbo.Inculpado.Llave = dbo.Resolucion.Llave INNER JOIN
  5.            dbo.Sentencia ON dbo.Inculpado.Llave = dbo.Sentencia.Llave INNER JOIN
  6.            dbo.SinSentencia ON dbo.Inculpado.Llave = dbo.SinSentencia.Llave INNER JOIN
  7.            dbo.Ordenes ON dbo.Inculpado.Llave = dbo.Ordenes.Llave
  8. WHERE     (dbo.Radicacion.Fecrad BETWEEN '01/01/2012' AND '30/06/2012')AND (dbo.SinSentencia.Sinsenten BETWEEN '01/01/2012' AND '30/06/2012')
  9.            AND (dbo.Inculpado.Cve_del BETWEEN '847501' AND '847808') AND (dbo.Inculpado.Adolescente = 0) AND (dbo.Inculpado.Juzgado = '050401')
  10.            AND (dbo.SinSentencia.Sinsenten <> '1800-01-01') AND (dbo.Resolucion.FecAfp <> '1800-01-01') AND (dbo.Resolucion.FecAul <> '1800-01-01')
  11.            AND dbo.Inculpado.EXP IN (
  12.                     SELECT t1.EXP FROM
  13.                         (SELECT COUNT(*) AS TOTAL, dbo.inculpado.EXP
  14.                          FROM dbo.Inculpado INNER JOIN
  15.                                 dbo.Radicacion ON dbo.Inculpado.Llave = dbo.Radicacion.Llave INNER JOIN
  16.                                 dbo.Resolucion ON dbo.Inculpado.Llave = dbo.Resolucion.Llave INNER JOIN
  17.                                 dbo.Sentencia ON dbo.Inculpado.Llave = dbo.Sentencia.Llave INNER JOIN
  18.                                 dbo.SinSentencia ON dbo.Inculpado.Llave = dbo.SinSentencia.Llave INNER JOIN
  19.                                 dbo.Ordenes ON dbo.Inculpado.Llave = dbo.Ordenes.Llave GROUP BY EXP) t1
  20.                         INNER JOIN (SELECT COUNT(*) AS TOTAL, dbo.inculpado.EXP
  21.                         FROM dbo.Inculpado INNER JOIN
  22.                                 dbo.Radicacion ON dbo.Inculpado.Llave = dbo.Radicacion.Llave INNER JOIN
  23.                                 dbo.Resolucion ON dbo.Inculpado.Llave = dbo.Resolucion.Llave INNER JOIN
  24.                                 dbo.Sentencia ON dbo.Inculpado.Llave = dbo.Sentencia.Llave INNER JOIN
  25.                                 dbo.SinSentencia ON dbo.Inculpado.Llave = dbo.SinSentencia.Llave INNER JOIN
  26.                                 dbo.Ordenes ON dbo.Inculpado.Llave = dbo.Ordenes.Llave
  27.                         WHERE (dbo.Radicacion.Fecrad BETWEEN '01/01/2012' AND '30/06/2012')AND (dbo.SinSentencia.Sinsenten BETWEEN '01/01/2012' AND '30/06/2012')
  28.                                AND (dbo.Inculpado.Cve_del BETWEEN '847501' AND '847808') AND (dbo.Inculpado.Adolescente = 0) AND (dbo.Inculpado.Juzgado = '050401')
  29.                                AND (dbo.SinSentencia.Sinsenten <> '1800-01-01') AND (dbo.Resolucion.FecAfp <> '1800-01-01') AND (dbo.Resolucion.FecAul <> '1800-01-01')
  30.                         GROUP BY EXP) t2 ON t1.EXP=t2.EXP
  31.                         WHERE t1.TOTAL=t2.TOTAL
  32.                         )
  33.                         GROUP BY EXP

ME QUEDARIA ALGO ASI AMIGO ????? NO ME ARROJA NINGUN ERROR, PERO SE TARDA COMO 15 SEGUNDOS EN ARROJARME NADA, SOLO EL TITULO DE LA COLUMNA "EXP" PERO EN BLANCO. NI 0 NI 1.


SIN SENTEN = FEC 1
FEC AUL = FEC 2
FEC AFP = FEC 3
__________________
:aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso:

Chino4Loves: agradezco de verdad tu ayuda

:arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba:
  #16 (permalink)  
Antiguo 05/09/2012, 14:33
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: Conteo Complicado SQLServer

cuanto tarde eso ya depende de las tablas implicadas y los indices de los mismos, que no te regresa resultados? ejecuta el query por partes

esto que regresa:

Código SQL:
Ver original
  1. SELECT COUNT(*) AS TOTAL, dbo.inculpado.EXP
  2.                         FROM dbo.Inculpado INNER JOIN
  3.                                 dbo.Radicacion ON dbo.Inculpado.Llave = dbo.Radicacion.Llave INNER JOIN
  4.                                 dbo.Resolucion ON dbo.Inculpado.Llave = dbo.Resolucion.Llave INNER JOIN
  5.                                 dbo.Sentencia ON dbo.Inculpado.Llave = dbo.Sentencia.Llave INNER JOIN
  6.                                 dbo.SinSentencia ON dbo.Inculpado.Llave = dbo.SinSentencia.Llave INNER JOIN
  7.                                 dbo.Ordenes ON dbo.Inculpado.Llave = dbo.Ordenes.Llave
  8.                         WHERE (dbo.Radicacion.Fecrad BETWEEN '01/01/2012' AND '30/06/2012')AND (dbo.SinSentencia.Sinsenten BETWEEN '01/01/2012' AND '30/06/2012')
  9.                                AND (dbo.Inculpado.Cve_del BETWEEN '847501' AND '847808') AND (dbo.Inculpado.Adolescente = 0) AND (dbo.Inculpado.Juzgado = '050401')
  10.                                AND (dbo.SinSentencia.Sinsenten <> '1800-01-01') AND (dbo.Resolucion.FecAfp <> '1800-01-01') AND (dbo.Resolucion.FecAul <> '1800-01-01')
  11.                         GROUP BY EXP
--------------------------------------------------

esto que regresa:

Código SQL:
Ver original
  1. SELECT t1.EXP FROM
  2.                         (SELECT COUNT(*) AS TOTAL, dbo.inculpado.EXP
  3.                          FROM dbo.Inculpado INNER JOIN
  4.                                 dbo.Radicacion ON dbo.Inculpado.Llave = dbo.Radicacion.Llave INNER JOIN
  5.                                 dbo.Resolucion ON dbo.Inculpado.Llave = dbo.Resolucion.Llave INNER JOIN
  6.                                 dbo.Sentencia ON dbo.Inculpado.Llave = dbo.Sentencia.Llave INNER JOIN
  7.                                 dbo.SinSentencia ON dbo.Inculpado.Llave = dbo.SinSentencia.Llave INNER JOIN
  8.                                 dbo.Ordenes ON dbo.Inculpado.Llave = dbo.Ordenes.Llave GROUP BY EXP) t1
  9.                         INNER JOIN (SELECT COUNT(*) AS TOTAL, dbo.inculpado.EXP
  10.                         FROM dbo.Inculpado INNER JOIN
  11.                                 dbo.Radicacion ON dbo.Inculpado.Llave = dbo.Radicacion.Llave INNER JOIN
  12.                                 dbo.Resolucion ON dbo.Inculpado.Llave = dbo.Resolucion.Llave INNER JOIN
  13.                                 dbo.Sentencia ON dbo.Inculpado.Llave = dbo.Sentencia.Llave INNER JOIN
  14.                                 dbo.SinSentencia ON dbo.Inculpado.Llave = dbo.SinSentencia.Llave INNER JOIN
  15.                                 dbo.Ordenes ON dbo.Inculpado.Llave = dbo.Ordenes.Llave
  16.                         WHERE (dbo.Radicacion.Fecrad BETWEEN '01/01/2012' AND '30/06/2012')AND (dbo.SinSentencia.Sinsenten BETWEEN '01/01/2012' AND '30/06/2012')
  17.                                AND (dbo.Inculpado.Cve_del BETWEEN '847501' AND '847808') AND (dbo.Inculpado.Adolescente = 0) AND (dbo.Inculpado.Juzgado = '050401')
  18.                                AND (dbo.SinSentencia.Sinsenten <> '1800-01-01') AND (dbo.Resolucion.FecAfp <> '1800-01-01') AND (dbo.Resolucion.FecAul <> '1800-01-01')
  19.                         GROUP BY EXP) t2 ON t1.EXP=t2.EXP
  20.                         WHERE t1.TOTAL=t2.TOTAL

y ya puedes ver porque no regresa nada..... la logica y como hacerlo ahi esta ahoa te toca a ti entenderla y aplicarla a tu problema :)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #17 (permalink)  
Antiguo 05/09/2012, 14:36
 
Fecha de Ingreso: septiembre-2004
Ubicación: Hermosillo, Sonora, Mexico
Mensajes: 28
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: Conteo Complicado SQLServer

Muchas gracias de verdad por tu ayuda!!
__________________
:aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso:

Chino4Loves: agradezco de verdad tu ayuda

:arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba:

Etiquetas: conteo, select, tabla
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 06:48.