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

Consulta SQL parecida a una Tabla Dinamica

Estas en el tema de Consulta SQL parecida a una Tabla Dinamica en el foro de Bases de Datos General en Foros del Web. Tengo la siguiente consulta: Necesito hacer una consulta SQL parecida a lo que se puede obtener de una tabla dinamica en excel, pero no sé ...
  #1 (permalink)  
Antiguo 16/02/2010, 11:19
 
Fecha de Ingreso: febrero-2010
Mensajes: 17
Antigüedad: 14 años, 2 meses
Puntos: 0
Consulta SQL parecida a una Tabla Dinamica

Tengo la siguiente consulta:

Necesito hacer una consulta SQL parecida a lo que se puede obtener de una tabla dinamica en excel, pero no sé si es posible obtenerla.

Ejemplo, la tabla sería así:

Tabla: Casos

Código HTML:
Empleado| ID	|Estado		|
--------------------------------
Pedro	| 111	|Cerrado	|
Pedro	| 112	|Abierto	|
Pedro	| 113	|Abierto	|
Pedro	| 114	|Abierto	|
Juan	| 115	|Cerrado	|
Juan	| 116	|Cerrado	|
Juan	| 117	|Abierto	|
Pedro	| 118	|Cerrado	|
El Resultado de la consulta debería ser así:

Código HTML:
Empleado|Cerrado| Abierto|
---------------------------
Pedro	| 2	|3	|
Juan	| 2	|1	|
Si utilizo 'Count' puedo obtener la cantidad de casos 'Cerrados' o 'Abiertos' pero yo necesito ambos. ¿Alguna idea?
  #2 (permalink)  
Antiguo 16/02/2010, 12:47
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta SQL parecida a una Tabla Dinamica

Código SQL:
Ver original
  1. mysql> SELECT *FROM estado;
  2. +----------+---------+
  3. | empleado | estado  |
  4. +----------+---------+
  5. | pedro    | cerrado |
  6. | pedro    | cerrado |
  7. | pedro    | abierto |
  8. | pedro    | abierto |
  9. | pedro    | abierto |
  10. | juan     | abierto |
  11. | juan     | cerrado |
  12. | juan     | cerrado |
  13. +----------+---------+
  14. 8 ROWS IN SET (0.00 sec)
  15. mysql> SELECT t1.empleado,t1.conteo abiertos,t2.conteo cerrados
  16. >FROM
  17. >(
  18. >SELECT empleado,COUNT(estado) conteo FROM estado
  19. >WHERE estado='abierto' GROUP BY empleado
  20. >)t1
  21. >INNER JOIN
  22. >
  23. >(
  24. >SELECT empleado,COUNT(estado) conteo FROM estado
  25. >WHERE estado='cerrado' GROUP BY empleado
  26. >)t2
  27. >ON t1.empleado=t2.empleado;
  28. +----------+----------+----------+
  29. | empleado | abiertos | cerrados |
  30. +----------+----------+----------+
  31. | juan     |        1 |        2 |
  32. | pedro    |        3 |        2 |
  33. +----------+----------+----------+
  34. 2 ROWS IN SET (0.01 sec)
  35.  
  36. mysql>

así?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 16/02/2010, 12:57
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta SQL parecida a una Tabla Dinamica

la sentencia limpia

Código SQL:
Ver original
  1. SELECT t1.empleado,
  2. t1.conteo abiertos,
  3. t2.conteo cerrados
  4. FROM
  5. (
  6. SELECT empleado,COUNT(estado) conteo FROM estado
  7. WHERE estado='abierto' GROUP BY empleado
  8. )t1
  9. INNER JOIN
  10. (
  11. SELECT empleado,COUNT(estado) conteo FROM estado
  12. WHERE estado='cerrado' GROUP BY empleado
  13. )t2
  14. ON t1.empleado=t2.empleado;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 16/02/2010, 13:39
 
Fecha de Ingreso: febrero-2010
Mensajes: 17
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Consulta SQL parecida a una Tabla Dinamica

Es perfecto muchas gracias =3
  #5 (permalink)  
Antiguo 16/02/2010, 13:41
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Consulta SQL parecida a una Tabla Dinamica

Hola,

Otra forma de hacerlo en MySQL:

Código MySQL:
Ver original
  1.     empleado,
  2.     sum(if(estado = 'Cerrado', 1, 0)) cerrado,
  3.     sum(if(estado = 'Abierto', 1, 0)) abierto
  4. group by empleado
Y otra forma de hacerlo en SQL Server:

Código SQL:
Ver original
  1. CREATE FUNCTION fn_strcmp (@estado VARCHAR(20), @compval VARCHAR(20))
  2. RETURNS INT AS
  3. BEGIN
  4.     IF (@estado = @compval) RETURN 1
  5.     RETURN 0
  6. END
  7.  
  8. SELECT
  9.     empleado,
  10.     SUM(dbo.fn_strcmp(estado, 'Cerrado')) cerrado,
  11.     SUM(dbo.fn_strcmp(estado, 'Abierto')) abierto
  12. FROM test
  13. GROUP BY empleado
Saludos,

Etiquetas: dinamica, sql, tablas
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:22.