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

Super Query

Estas en el tema de Super Query en el foro de Bases de Datos General en Foros del Web. Hola.. que necesitaría hacer para desplegar una consulta subagrupada... el problema es el siguiente: tengo esta consulta: select category, count(category) as total from reportcomplete where ...
  #1 (permalink)  
Antiguo 31/07/2003, 12:53
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Super Query

Hola.. que necesitaría hacer para desplegar una consulta subagrupada... el problema es el siguiente:

tengo esta consulta:

select category, count(category) as total
from reportcomplete
where client_name like '%renault.%'
group by client_name, category

y me despliega algo como esto:
Aplicaciones 2 = 34
Aplicaciones 1 = 15
Correo 1 = 45
Correo 2 = 23
Correo 3 = 10
Comunicaciones 1 = 5
Comunicaciones 2 = 3
..etc...

ahora como podría hacerlo pero que Aplicaciones 1 y 2 se engloben en Aplicaciones, correo 1,2,3..etc se engloben en correo y así sucesivamente de tal manera que me quede:

Aplicaciones = 49
Correo = 78
Comunicaciones 8...etc...

ya se que podría leer el resultado y hacer las sumas desde programacion... pero necesito la consulta, ya que el resultado lo guardo en un DataSet (Asp.net) y requiere esos valores.

Como lo podría hacer..?? , acaso creo una vista... algun buen procedimiento que tenga if... etc..

estoy usando sql server 2000,

Gracias
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #2 (permalink)  
Antiguo 31/07/2003, 13:45
Avatar de Jorge_Mota  
Fecha de Ingreso: diciembre-2002
Ubicación: Chapinlandia :-D
Mensajes: 725
Antigüedad: 21 años, 5 meses
Puntos: 11
mira si te sirve esto:
select category, count(category) as total
from reportcomplete
where client_name like '%renault.%'
group by client_name, Substring(Category,1,6)
__________________
Jorge Mota
Blog
Gubiz estafa
  #3 (permalink)  
Antiguo 31/07/2003, 14:11
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
MM.. gracias por tu ayuda friend.. pero me sigue desplegando los mismos resultados.... no habría algo que pueda hacer como:

if category="aplicaciones 1" or "aplicaciones 2" then
category = "apliaciones" (sumo los valores)
end if


o algo por el estilo...

Cualquier comentarios sera bienvenido .. .
  #4 (permalink)  
Antiguo 31/07/2003, 15:36
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Y si cambias en group by category, client_name?
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #5 (permalink)  
Antiguo 01/08/2003, 02:03
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Prueba con algo como esto

select Left(category, CharIndex(' ', Category) -1), count(category) as total
from reportcomplete
where client_name like '%renault.%'
group by Left(category, CharIndex(' ', Category) -1)

He quitado también lo de cliente, aunque no sé si te afectará en la SELECT y en los resultados que quieres obtener
  #6 (permalink)  
Antiguo 01/08/2003, 09:05
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Exactamente eso era lo que necesitaba Teri... , mucgas gracias....pero ahora para ponerla mas dificl (si es que se puede) ,

Tengo ya mis resultados así..

Aplicaciones = 30
Correo = 67
Comunicaciones = 23
Bir = 12
Otros = 10
datos = 30

ahora lo que quisiera ver es si puedo englobar por ejemplo..

bir, otros y datos en un grupo que se llame "otros" y quedara de la siguiente forma:

Aplicaciones = 30
Correo = 67
Comunicaciones = 23
Otros = 52

Se podrá..??

Gracias
  #7 (permalink)  
Antiguo 04/08/2003, 02:11
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Claro...... casi todo es posible, todo depende del tiempo que se tenga y de si lo que pretendes, va a servir, porque tienes que poner los valores 'a pelo' en la query, y eso es muy peligroso, porque si cambian los datos, dejará de funcionar, por el momento te pongo lo que pides....

SELECT Category, Count(Category) as total
(Select
CASE Left(category, CharIndex(' ', Category) -1)
WHEN 'Bir' THEN 'Otros'
WHEN 'datos' THEN 'Otros
ELSE Left(category, CharIndex(' ', Category) -1)
END
AS Category from reportcomplete
where client_name like '%renault.%') AS Sub_Q_1
group by Category

Otros, no lo pongo, porque ya saldrá como quieres, y ahorras un WHEN.

No he probado bien la SELECT, espero que te funcione

Un saludo
  #8 (permalink)  
Antiguo 04/08/2003, 10:29
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Gracias nuevamente Teri , mira.. ya probé la query.. pero me está marcando un error el siguiente error

Cita:
Invalid length parameter passed to the substring function.
y tengo la siguiente query:

Código PHP:
SELECT CategoryCount(Category) as Total, (Select CASE Left(categoryCharIndex(' 'category)) 
WHEN 'Bir' THEN 'Otros'
WHEN 'Datos' THEN 'Otros'
ELSE Left(categoryCharIndex(' 'Category) -1)
END 
AS category from reportcomplete
where client_name like 
'%renault.%') AS Sub_Q_1
from reportcomplete
where date_created 
convert(datetime,'01/01/2003',103)
and 
date_created convert(datetime,'01/02/2003',103)
group by category 
Por cierto.. me imagino que va un , despues de:

SELECT Category, Count(Category) as Total, (Select CASE Left(category, CharIndex(' ', category))

verdad.??

Y otra cosa, ésta consulta me va a devolver tres columnnas..?? o como esá funcionando exactamente la subquery..??

Gracias
  #9 (permalink)  
Antiguo 05/08/2003, 01:57
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Perdona ayer estaba con la empaná mental, debe ser la falta de vacaciones

Lo que falta no era una coma, sino un FROM, la query debería quedar así

SELECT Category, Count(Category) as Total
FROM
(Select
CASE Left(Category, CharIndex(' ', Category) -1)
WHEN 'Bir' THEN 'Otros'
WHEN 'Datos' THEN 'Otros'
ELSE Left(Category, CharIndex(' ', Category) -1)
END
AS Category from reportcomplete
WHERE client_name LIKE '%renault.%') AS Sub_Q_1
group by Category


Esto devolverá sólo dos columnas, tal y como estaba.

Para además filtrar por fechas tal y como tienes, la query podría quedar así:

SELECT Category, Count(Category) as Total
FROM
(Select
CASE Left(Category, CharIndex(' ', Category) -1)
WHEN 'Bir' THEN 'Otros'
WHEN 'Datos' THEN 'Otros'
ELSE Left(Category, CharIndex(' ', Category) -1)
END
AS Category from reportcomplete
WHERE client_name like '%renault.%' AND
date_created BETWEEN '2003/01/01' AND '2003/01/02'
) AS Sub_Q_1
GROUP BY Category

El error que comentas, puede ser debido a que hay algún valor de Category, que no tiene espacios antes del número, o bien no tiene número, de ser así habría que modificar un poco el CASE

Ya dirás que tal anda esta SELECT

Un saludo
  #10 (permalink)  
Antiguo 06/08/2003, 08:56
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Exacto Teri , me ha servido bastante tu ejemplo... !! gracias.

Saludos
  #11 (permalink)  
Antiguo 06/08/2003, 09:09
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Por cierto... aprovechando nuevamente tu ayuda... solo una pregunta mas , si tengo por ejemplo.. campos que son como Internet, Otros, los cuales no tienen espacios en blanco y lo quiero englobar dentro de la categoría "Otros" que parte del case debería modificar ???

O si puedes mandarme algun link que tengas para manejar esas consultas en SQL Server te lo agradeceré todavía mas.

Saludos
  #12 (permalink)  
Antiguo 07/08/2003, 01:50
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Más que vínculos en Internet, lo mejor es revisar la ayuda de SQL Sever, mas concretamente, la parte de Transact SQL, ahí viene las funciones a usar, y como usarlas

Para conseguir lo que dices, es decir, tener en cuenta que puede haber campos sin espacios, antes del case hay que poner un primer case en el que compruebes que no haya espacios

CASE CharIndex(' ', Category)
WHEN 0 THEN ++este es la parte sin espacios
ELSE ++ aquí pones lo de antes, para cuando vengan espacios

Espero que te sirva
  #13 (permalink)  
Antiguo 07/08/2003, 09:36
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Perfecto.. , muchas gracias...!!

Ya tengo los resultados que necesitaba...

Cool
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 02:27.