FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
dudas con la clausula group by
hola buenas tardes a todos, mi problema es el siguiente, tengo una tabla can varios campos
entre los k estan cia varchar(50), no_cmunicacion int,status varchar k contiene valores como 'PROCESADA','EN PROCESO','CANCELADA' tengo registros en mi tabla y requiero sacar la cia, cantidad de comunicaciones, y la cantidad de de comunicaciones cuyo status es 'procesada' por ejemplo cia TOTAL_COMUNICACIONES COMUNICACIONES_PROCESADAS COMPAñIA DE PRUEBA 5 3 compañia x 3 2 y asi sucesivamente estoy tratandolo de hacer con la clausula group by pero no lo logro hacer: este es mi codigo
NOTA. MIVISTA ES UNA VISTA QUE TENGO EN MIBD K EXTRAE REGISTROS DE DOS TABLAS MEDIANTE UN INNER JOIN POR LO CUAL EL NO_COMUNICACION SE PUEDE REPETIR, POR ESO PUSE LA PALABRA DISTINC, EL PROBLEMA ES K ESTE QUERY ME TRAE LA INFORMACION INDEBIDA ES DECIR TOTAL_SOLICTUDE TOTAL_PROCESADAS 4 4 PERO SI CAMBIO EL STATUS A UN REGISTRO X Y LO PONGO EN POR EJEMPLO 'EN PROCESO' Y VUEVO A EJECUTAR EL QUERY ME DEVUELVE LO SIGUIENTE TOTAL_SOLICTUDE TOTAL_PROCESADAS 3 3 Y LO K DEBERIA DEVOLVER SERIA : TOTAL_SOLICTUDE TOTAL_PROCESADAS 4 3 ESTOY UTILIZANDO SQL SERVER 2000. gracias de antemano. |
#2
|
||||
|
||||
El problema está en que utilizas 2 COUNT en la misma consulta, por lo tanto les afecta el criterio que hay en el WHERE por igual. Es decir te está contando todas las que STATUS_CM='PROCESADA'. Para solucionarlo puedes usar UNION:
por un lado te calcula el total por cada naviera_SOLIC y por otro los que STATUS_CM='PROCESADA'. No se si es eso lo que pides.
__________________
No hope, no dreams, no love, my only escape is Underground |
#3
|
|||
|
|||
El Problema Persiste
HOLA COMPAÑERO GRACIAS POR TU RESPUESTA, REALICE EL QUERY COMO ME INDICASTE UTILIZANDO EL UNION Y ME PERSISTE EL MISMO PROBLEMA, ES DECIR LA CONSULTA ME DEVULVE DOS COLUMNAS QUE SON
NAVIERA_SOLIC TOTAL_SOLICITUDES PERO LO QUE REQUIERO ES QUE EL QUERY ME DEVUELVA TRES COLUMNAS QUE SON NAVIERA_SOLIC TOTAL_SOLICITUDES Y TOTAL_PROCESADAS donde total_solicitudes corresponde al primer count, y el total_procesadas corresponde a aquellas solicitudes que su status_cm sea procesada, NO SE SI ME DOY A ENTENDER, COMO LE HAGO PARA HACER ESTO ?.... |
#4
|
||||
|
||||
Los cálculos de los COUNTS si que los hace bien, sólo que en vez de mostrártelo en columnas te lo muestra en filas o registros
Mmmm... Para obtener la consulta que quieres puedes utilizar 2 consultas diferentes, una para cada COUNT, metiendo el resultado en 2 tablas temporales: en una metes los registros de la consulta de TOTAL_SOLICITUDES y en la otra los registros de la consulta de TOTAL_PROCESADAS. Luego haces un INNER JOIN entre las 2 uniendo por naviera_SOLIC y saldrá como tú quieres. Sería algo así:
__________________
No hope, no dreams, no love, my only escape is Underground |
#5
|
|||
|
|||
exactamente
hola hermano, hice lo k me dijiste con las dos consutas y resultó perfectamente bien, muchas gracias por tu ayuda y k dios te bendiga.
"el conocimiento es un don que crece a medida que se comparte". |
#6
|
|||
|
|||
Nuevo Problema
Hola Como Estas, Aunque Se Resolvio El Problema De Los Count, Ahora Surge Un Problema Nuevo, Se Trata De Que Si Por Ejemplo Hay Una Naviera K No Tiene Status_cm='procesada' El Query Saca A La Naviera Del Grupo, En Lugar De Ponerle Un Cero, Me Explico
Si Por Ejemplo Tengo Naviera Solic Total_solicitudes, Total_procesadas Naviera X 9 0 Entones En El Group By No Me Aparece La Naviera X, Es Como Si Para El Query No Existiera, Lo Que Kiero Es K El Query Me Presente La Informacion Aunque No Haya Totales Con Status_cm, Y Que En Lugar De Sacarlo Del Grupo Me Presente A Naviera_solic,total_solicitudes, Y Total_procesadas=0 En Caso De No Tener Ningun Status_cm='procesada', Creo K Esta Un Poco Enrredado... |
#7
|
||||
|
||||
En ese caso vas a tener que cambiar un poco las consultas. En vez de hacer los COUNT antes de insertarlos en las tablas temporales, hay que hacerlos después. Me explico:
supongo que tienes algo así:
ahora tienes que meter todos los registros en vez de directamente el valor del COUNT:
lo mismo para cuando STATUS_CM='PROCESADA'. Y por último harías los COUNT en las tablas temporales:
Fíjate que ahora en vez de hacer un INNER JOIN, hacemos un LEFT JOIN, para hacer que el campo por el que cuente sea el de la tabla del lado izquierdo del JOIN, o sea TABLA_TEMP_1. De esa forma los que no existan en TABLA_TEMP_2 los COUNT mostrarán 0.
__________________
No hope, no dreams, no love, my only escape is Underground Última edición por Axel_Tech fecha: 09-12-2009 a las 13:16:20. |
#8
|
|||
|
|||
Efectivamente
EL PROBLEMA SE SOLUCIONO, REEMPLACE EL INNER JOIN POR UN LEFT JOIN Y CON ESO QUEDO RESUELTO, ENTONCES TAMBIEN PUSE LA FUNCION ISNULL(TOTA_PROCESADAS,0) PARA SI EN CASO NO EXISTA PROCEDAS ME DEVUELVA UN CERO Y ESO ERA TODO, MUCHAS GRACIAS NUEVAMENTE POR TU AYUDA, CUIDATE MUCHO Y HASTA PRONTO HERMANO...
Cita:
|
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Impresion de group header group footer | Manuel | Impresión | 3 | 11-11-2007 01:05:23 |
Clausula Like | JoseAntonio | SQL | 5 | 27-05-2007 07:28:47 |
Clausula LIKE | federiconqn21 | SQL | 3 | 28-12-2005 15:49:13 |
consultas anidadas: group by dentro otro group by | DobleSiete | SQL | 7 | 31-01-2005 14:59:31 |
Group Header, Detail y Footer Group en la misma pagina | MarcelRuz | Impresión | 0 | 20-04-2004 23:27:14 |
|