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

Contar Registros y Colocarlos en columnas separadas!!!

Estas en el tema de Contar Registros y Colocarlos en columnas separadas!!! en el foro de SQL Server en Foros del Web. Hola, buen día a todos!!! Tengo una duda, quisiera saber como poder colocar en columnas separadas el total de registros de un mismo valor, por ...
  #1 (permalink)  
Antiguo 30/11/2011, 11:22
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 8 meses
Puntos: 1
Sonrisa Contar Registros y Colocarlos en columnas separadas!!!

Hola, buen día a todos!!!

Tengo una duda, quisiera saber como poder colocar en columnas separadas el total de registros de un mismo valor, por ejemplo:

Tengo una tabla:

rpe-------cl_incid
111-------026
111-------050
111-------050
125-------050
125-------050
125-------067
135-------067
135-------026
135-------026

De esa tabla generar otra en la que me cuente cada registro igual y me lo coloque en una columna para cada tipo:

RPE-----026-----050-----067
111-----1------- 2--------- 0
125-----0------- 1--------- 1
135-----2------- 0--------- 1

Hasta ahora tengo esto:

Código SQL:
Ver original
  1. SELECT rpe, cl_incid, COUNT(*) AS total FROM b_asiste WHERE (cl_incid='026' OR cl_incid='050' OR cl_incid='067') AND rpe='76880' GROUP BY rpe, cl_incid

Pero me genera una tabla así:

rpe-------cl_incid-------total
76880-------026-------4
76880-------050-------7

No se como colocar cada tipo de "incidencia" en una columna separada para cada rpe, disculpen por hacer sonar esto tan enredado, en realidad tal vez no lo sea, pero desconozco como poder hacer esto, agradezco su ayuda de antemano =)...
  #2 (permalink)  
Antiguo 30/11/2011, 11:39
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: Contar Registros y Colocarlos en columnas separadas!!!

Código:
   SELECT *
    FROM mitabla  r 
        PIVOT ( count (cl_incid)   
           FOR  cl_incid IN ([026], [050], [067])   
        ) AS pvt
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 30/11/2011, 11:59
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Contar Registros y Colocarlos en columnas separadas!!!

Hola! Gracias Andres95 Pues intenté con la función PIVOT que pusiste, aprovecho para agradecerte por incluirla, no la conocía y ahorita estuve viendo más o menos como funciona, desafortunadamente me genera el siguiente error:

Línea 1: sintaxis incorrecta cerca de '('.

Estoy utilizando el Visual Studio, y corro mi consulta desde este en lenguaje asp.net, esta es la consulta que hicé:

Código SQL:
Ver original
  1. SELECT rpe, cl_incid FROM b_asiste PIVOT(COUNT(cl_incid) FOR cl_incid IN ([026], [050], [067])) AS pvt WHERE (cl_incid='026' OR cl_incid='050' OR cl_incid='067') AND (rpe='76880' OR rpe='9ATE5') GROUP BY rpe, cl_incid ORDER BY rpe

Saludos, y nuevamente gracias!!!...
  #4 (permalink)  
Antiguo 30/11/2011, 13:48
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: Contar Registros y Colocarlos en columnas separadas!!!

Puedes usar una expresion en lugar de la tabla...

Código:
   SELECT *
    FROM(
			SELECT rpe, cl_incid
			FROM mitabla
			WHERE  cl_incid IN ('026', '050', '067') 
				AND  rpe IN ('76880','9ATE5') 
    ) r 
        PIVOT ( count (cl_incid)   
           FOR  cl_incid IN ([026], [050], [067])   
        ) AS pvt
 ORDER BY 1

Saludos!

P.D. Esto no funciona en SQL 2000.
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 30/11/2011, 14:05
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Contar Registros y Colocarlos en columnas separadas!!!

Antes que nada, gracias nuevamente por tu respuesta Andres95.

Pues yo uso SQL Server 2008, y realice la consulta como la mencionas, unicamente cambiando el nombre de la tabla:

Código SQL:
Ver original
  1. SELECT * FROM (SELECT rpe, cl_incid FROM b_asiste WHERE cl_incid IN ('026', '050', '067') AND rpe IN ('76880','9ATE5')) r PIVOT (COUNT (cl_incid) FOR  cl_incid IN ([026], [050], [067])) AS pvt ORDER BY 1

Me sale el siguiente error:

sintaxis incorrecta cerca de 'PIVOT'.

Ahm... Tengo 2 preguntas:

¿Importa si no dejo los saltos de lineas? Estoy trabajando en asp y no me lo permite, y bueno ya antes había hecho en consultas que se supone y los llevan pero aún así me funcionaban, no se si sea extrictamente necesario con la función PIVOT

¿La "r" que aparece en la consulta que viene siendo? Disculpa si son preguntas tontas pero yo lo confundi con un alias pero veo que no tiene el "AS" así que estoy como que revuelto en eso.

A "r" lo puse como un alias y me genero el mismo error, despues lo quite y:

sintaxis incorrecta cerca de '('.

El pivot me esta sacando canas verdes ...
  #6 (permalink)  
Antiguo 30/11/2011, 14:22
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: Contar Registros y Colocarlos en columnas separadas!!!

no son necesarios los saltos de linea...

tal vez tu variable en asp se este sobrepasando y tu comando no llega correctamente a SQL.

Para verificar el comando ejecutado puedes hacer un Trace con SQL Server Profiler.

Tal vez lo mejor seria que ejecutaras este comando directamente desde el SQL Server Management Studio.

Yo lo probe con SQL Server 2008 y 2008 R2 y funciona correctamente...


Por otro lado, si la R es un alias, se requiere para nombrar la expresion del subquery.



Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #7 (permalink)  
Antiguo 30/11/2011, 14:44
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Contar Registros y Colocarlos en columnas separadas!!!

Pues ejecuté la misma consulta en el SQL SMS, y lo mismo... El mismo error:

Código SQL:
Ver original
  1. Mens. 170, Nivel 15, Estado 1, Línea 1
  2. Línea 1: sintaxis incorrecta cerca de 'PIVOT'.

Mi SQL esta loco, es el mismito que tu usas, y aún así se me revela :s... Me encuentro en ceros...

Gracias Andres95...
  #8 (permalink)  
Antiguo 30/11/2011, 14:51
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: Contar Registros y Colocarlos en columnas separadas!!!

Debe haber algo diferente, pero no se me ocurre que..


Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #9 (permalink)  
Antiguo 30/11/2011, 14:52
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Contar Registros y Colocarlos en columnas separadas!!!

Eso mismo pensé xD... Gracias por las molestias Andres...
  #10 (permalink)  
Antiguo 30/11/2011, 14:59
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: Contar Registros y Colocarlos en columnas separadas!!!

La unica que he visto es lo siguiente:

Código:
Msg 325, Level 15, State 1, Line 9
Incorrect syntax near 'PIVOT'. You may need to set the compatibility level of the current database to a higher value to enable this feature. See help for the SET COMPATIBILITY_LEVEL option of ALTER DATABASE.
Esto pasa cuando en SQL 2008 tu base de datos la defines con el nivel de compatibilidad 2000, esto es comun cuando se traen Bds de sistemas que funcionaban en version 2000.

Para comprobar el nivel de compatibilidad de tu DB en el SS Management Studio, da click derecho sobre la DB -> Properties -> Options -> Compatibility Level

Deberia estar seleccionado al menos SQL Server 2005 (90) o bien SQL Server 2008 (100)



Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #11 (permalink)  
Antiguo 30/11/2011, 15:10
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Contar Registros y Colocarlos en columnas separadas!!!

Creo que ya salio el peine :s... Yo trabajo con SQL Server 2008 pero al parecer la Base de Datos a la cual me conecto es de la versión 2000, bueno yo supongo eso ya que en la versión de Compatibilidad me marca solamente SQL Server 2000 y SQL Server 7.0. Eso quiere decir que me puedo ir olvidando de la función PIVOT?? :S...

Saludos...
  #12 (permalink)  
Antiguo 30/11/2011, 15:18
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: Contar Registros y Colocarlos en columnas separadas!!!

jejeje

tal vez por ahi hubieramos empezado.. con un
Código:
SELECT @@Version

Asi es, no funciona con SQL 2000, pero hay otra forma de hacerlo utilizando CASE

Código:
SELECT rpe
	  ,SUM(CASE WHEN cl_incid = '026' THEN 1 ELSE 0 END) [026]
	  ,SUM(CASE WHEN cl_incid = '050' THEN 1 ELSE 0 END) [050]
	  ,SUM(CASE WHEN cl_incid = '067' THEN 1 ELSE 0 END) [067]
FROM rpet
WHERE  cl_incid IN ('026', '050', '067') 
	AND  rpe IN ('111','125') 
GROUP BY RPE
ORDER BY 1


Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #13 (permalink)  
Antiguo 30/11/2011, 15:29
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Contar Registros y Colocarlos en columnas separadas!!!

Wooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooow!!! Mis respetos Andres, enserio muchisiiiiiiiiiiiiiiiiiiiiiiiiimas gracias!!! No se como lo haces pero creeme que para mí eres otra cosa en el manejo de base de datos!!!

Probé el SELECT @@Version Ya que no lo conocía y bueno jajaja, ya ahora si vi que versión de SQL es en la que esta la Base de Datos en la que estoy trabajando:

El el SQLS 2000... La consulta gracias a Dios me funciono al 100%. Si te pudiera dar 1000 puntotes lo haría xD... Ahora solo tego que acoplarla a mi página en ASP =)...

MUCHAS GRAAAAAACIAAAAAAAAAAAAAAAAAAAAAS!!!...
  #14 (permalink)  
Antiguo 30/11/2011, 15:32
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: Contar Registros y Colocarlos en columnas separadas!!!

Excelente!



Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #15 (permalink)  
Antiguo 01/12/2011, 11:07
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: Contar Registros y Colocarlos en columnas separadas!!!

Pequeño detalle, que ocurre infinidad de veces con las versiones, se cree y se asegura estar en "x" version, pero al momento de ver la compatibilidad, resulta que no era como una pensaba.....
__________________
MCTS Isaias Islas

Etiquetas: registros, registros_multiples, sql, aspx
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 20:30.