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

Consulta sobre una tabla

Estas en el tema de Consulta sobre una tabla en el foro de SQL Server en Foros del Web. Hola. Necesitaria ayuda ya que estoy iniciandome con SQL y necesito realizar lo siguiente. Tengo una tabla(Limpieza) en la cual tengo los siguientes atributos: NumeroEmpleado, ...
  #1 (permalink)  
Antiguo 02/12/2010, 16:43
 
Fecha de Ingreso: diciembre-2010
Mensajes: 27
Antigüedad: 13 años, 5 meses
Puntos: 0
Consulta sobre una tabla

Hola. Necesitaria ayuda ya que estoy iniciandome con SQL y necesito realizar lo siguiente.
Tengo una tabla(Limpieza) en la cual tengo los siguientes atributos:
NumeroEmpleado, NumeroHabitacion,Fecha.
Por otrolado tengo una tabla Empleados entre los que se encuentran campos como el nombre, domicilio, Salario,etc.

Lo que quiero es "Incrementar en un 20% el sueldo del empleado que mas habitaciones haya limpiado".

Mi pregunta es: esto lo debo hacer en un procedimiento???
Y además:

SELECT NumReg,COUNT (*)
FROM Limpieza
GROUP BY NumReg


consigo que por cada empleado, el numero total de habitaciones que ha limpiado cada uno, pero no se me ocurre ahora como quedarme con el empleado que mas habitaciones ha limpiado para incrementarle el sueldo en la tabla Empleados.

Espero vuestra ayuda.
Gracias.
Un saludo
  #2 (permalink)  
Antiguo 02/12/2010, 17:34
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Consulta sobre una tabla

No lo he probado, pero esa es la idea:
Código SQL:
Ver original
  1. UPDATE Empleados
  2. SET Salario = Salario * 1.2
  3. FROM Empleados E
  4. INNER JOIN (
  5.     SELECT TOP 1 NumeroEmpleado, COUNT(1) TotalHabit
  6.     FROM Limpieza
  7.     GROUP BY NumeroEmpleado
  8.     ORDER BY 2 DESC
  9. ) T ON E.Id = T.NumeroEmpleado
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 03/12/2010, 01:06
 
Fecha de Ingreso: diciembre-2010
Mensajes: 27
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Consulta sobre una tabla

Gracias por la respuesta pero me podrias explicar la idea que me planteas ya que no entiendo muy bien esta parte:

INNER JOIN ( SELECT TOP 1 NumeroEmpleado, COUNT(1) TotalHabit FROM Limpieza GROUP BY NumeroEmpleado ORDER BY 2 DESC) T ON E.Id = T.NumeroEmpleado
  #4 (permalink)  
Antiguo 03/12/2010, 06:42
 
Fecha de Ingreso: diciembre-2010
Mensajes: 27
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Consulta sobre una tabla

es que no entiendo lo de los numeros, es decir ... TOP 1... ó el ORDER BY 2 DESC ....
y el INNER JOIN se hace para relacionar 2 tablas con atributos comunes como es el caso de NumeroEmpleado no???
  #5 (permalink)  
Antiguo 03/12/2010, 07:55
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Consulta sobre una tabla

TOP 1 devuelve solo 1 registro por mas que hayan mas.
ORDER BY 2 DESC ordena el resultado descendentemente por la segunda columna.
Al final en la subconsulta quedara un solo registro, que es el empleado que mas habitaciones ha limpiado.
Sobre el INNER JOIN es correcto lo que dices.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #6 (permalink)  
Antiguo 03/12/2010, 17:33
 
Fecha de Ingreso: diciembre-2010
Mensajes: 27
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Consulta sobre una tabla

gracias por la respuesta. Y una cosa, si fueran 2 los que coincidiera los que tuvieran el maximo numero de habitaciones???
  #7 (permalink)  
Antiguo 03/12/2010, 20:24
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Consulta sobre una tabla

Si pense en eso, pero la respuesta debes darla tu.
Segun eso hacemos el cambio en el codigo.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #8 (permalink)  
Antiguo 04/12/2010, 05:15
 
Fecha de Ingreso: diciembre-2010
Mensajes: 27
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Consulta sobre una tabla

ok, ya está solucionado. 1000 gracias
  #9 (permalink)  
Antiguo 04/12/2010, 05:21
 
Fecha de Ingreso: diciembre-2010
Mensajes: 27
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Consulta sobre una tabla

lo he solucionado poniendo en "TOP 2", pero claro, porque se que que son 2 los que tienen el mayor numero de habita.limpiadas, pero si no lo se... porque he probado a poner TOP * ó TOP ALL y me da error.
  #10 (permalink)  
Antiguo 04/12/2010, 05:53
 
Fecha de Ingreso: diciembre-2010
Mensajes: 27
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Consulta sobre una tabla

UPDATE Empleado
SET Salario = Salario * 1.2
FROM Empleado
INNER JOIN
((SELECT NumEmpleado,COUNT(*)
FROM Limpieza
GROUP BY NumEmpleado
HAVING COUNT(*) >= ALL
(SELECT COUNT(*)
FROM Limpieza
GROUP BY NumEmpleado))
ORDER BY 2 DESC)Tabla
ON Empleado.NumEmpleado = Tabla.NumEmpleado



me da error. Con esto intento modificar todos los que sean maximo, haya,1,2 o los que sean, pero me da un error de
Mens. 156, Nivel 15, Estado 1, Línea 12
Sintaxis incorrecta cerca de la palabra clave 'ORDER'.
  #11 (permalink)  
Antiguo 04/12/2010, 22:47
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Consulta sobre una tabla

No puede ir ORDER BY dentro de una subconsulta sino se usa TOP.
Dime, a cuantos se le va a aumentar el 20% del sueldo? Acaso no es uno?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #12 (permalink)  
Antiguo 05/12/2010, 03:01
 
Fecha de Ingreso: diciembre-2010
Mensajes: 27
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Consulta sobre una tabla

en mi tabla que tengo es 1, pero porque es una tabla pequeña con pocos datos, pero si tuviera una tabla mucho mas grande, en el que coincidiera por ejemplo 5 trabajadores con el maximo numero de habitaciones limpiadas, no hay manera de hacerlo en la consulta sin contar en la tabla este numero y poner TOP 5???
  #13 (permalink)  
Antiguo 05/12/2010, 08:56
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Consulta sobre una tabla

Prueba asi:
Código SQL:
Ver original
  1. UPDATE Empleados
  2. SET Salario = Salario * 1.2
  3. FROM Empleados E
  4. INNER JOIN (
  5.     SELECT NumeroEmpleado, COUNT(1) TotalHabit
  6.     FROM Limpieza
  7.     GROUP BY NumeroEmpleado
  8.     HAVING COUNT(1) = (SELECT MAX(COUNT(1)) FROM Limpieza GROUP BY NumeroEmpleado)
  9. ) T ON E.Id = T.NumeroEmpleado
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #14 (permalink)  
Antiguo 05/12/2010, 17:50
 
Fecha de Ingreso: diciembre-2010
Mensajes: 27
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Consulta sobre una tabla

Gracias por la ayuda pero
me da un error de este tipo:
"No es posible usar una función de agregado con una expresión que contiene un agregado o una subconsulta.". Esto que significa, que dentro de un select no puede ir otro select???.
  #15 (permalink)  
Antiguo 07/12/2010, 03:35
 
Fecha de Ingreso: diciembre-2010
Mensajes: 27
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Consulta sobre una tabla

porque me sale este error?
  #16 (permalink)  
Antiguo 07/12/2010, 06:16
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Consulta sobre una tabla

Asi?
Código SQL:
Ver original
  1. DECLARE @MAX INT
  2. SET @MAX = (SELECT MAX(COUNT(1)) FROM Limpieza GROUP BY NumeroEmpleado)
  3. UPDATE Empleados
  4. SET Salario = Salario * 1.2
  5. FROM Empleados E
  6. INNER JOIN (
  7.     SELECT NumeroEmpleado, COUNT(1) TotalHabit
  8.     FROM Limpieza
  9.     GROUP BY NumeroEmpleado
  10.     HAVING COUNT(1) = @MAX
  11. ) T ON E.Id = T.NumeroEmpleado
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #17 (permalink)  
Antiguo 07/12/2010, 11:20
 
Fecha de Ingreso: diciembre-2010
Mensajes: 27
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Consulta sobre una tabla

es que me sigue saliendo el error que:
Mens. 130, Nivel 15, Estado 1, Línea 2
No es posible usar una función de agregado con una expresión que contiene un agregado o una subconsulta.
  #18 (permalink)  
Antiguo 07/12/2010, 12:02
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Consulta sobre una tabla

Modifica esto:
Código SQL:
Ver original
  1. SET @MAX = (SELECT MAX(x) FROM (SELECT NumeroEmpleado, COUNT(1) x FROM Limpieza GROUP BY NumeroEmpleado) T)
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #19 (permalink)  
Antiguo 07/12/2010, 15:10
 
Fecha de Ingreso: diciembre-2010
Mensajes: 27
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Consulta sobre una tabla

Agradezco tu respuesta, pero podrias explicarme que es lo que hace esasentencia??? donde pones x, que tendria que ir, El Numero de empleado???
  #20 (permalink)  
Antiguo 07/12/2010, 15:24
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Consulta sobre una tabla

Primero se obtiene un listado de la cantidad de habitaciones limpiadas por un empleado, luego de esa lista se obtiene el numero mayor, este se asigna a la variable @max.
X es un alias.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #21 (permalink)  
Antiguo 07/12/2010, 16:38
 
Fecha de Ingreso: diciembre-2010
Mensajes: 27
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Consulta sobre una tabla

muchas gracias. Espero que sea lo ultimo jeje.

Tabla1 Tabla2
--------- ----------
102 101
202 102
203 300
390
203

SELECT Atributo FROM Tabla2 WHERE Atributo NOT IN
(SELECT Atributo1 FROM Tabla1 WHERE 'lo que sea' = Atributo2)


Lo que quiero obtener es: 202 de la tabla 1, es decir con SELECT Atributo1 FROM Tabla1 WHERE 'lo que sea' = Atributo2) obtengo el resultado de tabla 1 y quiero compararla con tabla2 y quedarme de la tabla1 con aquellos que no aparezcan en tabla 2 pero de la manera que lo pingo, me salen evidentemente tambien los de tabla2

Etiquetas: 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 18:15.