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

Querys en Sql Server

Estas en el tema de Querys en Sql Server en el foro de SQL Server en Foros del Web. Tengo estas 3 tablas use SUMMER create table cliente (id char(3 )primary key, apellidos varchar(50), nombres varchar(50), sexo char(1)) create table sueldos (id char(3), periodo ...
  #1 (permalink)  
Antiguo 01/06/2012, 16:35
Avatar de websistems  
Fecha de Ingreso: octubre-2010
Mensajes: 69
Antigüedad: 13 años, 6 meses
Puntos: 0
Querys en Sql Server

Tengo estas 3 tablas

use SUMMER

create table cliente
(id char(3 )primary key,
apellidos varchar(50),
nombres varchar(50),
sexo char(1))


create table sueldos
(id char(3),
periodo date,
sueldo int)

create table estados
(id char(3),
estado varchar(25))


alter table sueldos
add foreign key (id) references cliente(id)

alter table estados
add foreign key (id) references cliente(id)



insert into cliente (id,apellidos,nombres,sexo) values ('001','Perez','Juan','M')
insert into cliente (id,apellidos,nombres,sexo) values ('002','Lopez','Carla','F')
insert into cliente (id,apellidos,nombres,sexo) values ('003','Pinedo','Jorge','M')
insert into cliente (id,apellidos,nombres,sexo) values ('004','Torres','Jose','M')
insert into cliente (id,apellidos,nombres,sexo) values ('005','Zapata','Pamela','F')
insert into cliente (id,apellidos,nombres,sexo) values ('006','Zavaleta','Sofia','F')


select * from sueldos

insert into sueldos (id,periodo,sueldo) values ('001','15-01-2012',1500)
insert into sueldos (id,periodo,sueldo) values ('001','01-01-2012',1800)
insert into sueldos (id,periodo,sueldo) values ('002','15-01-2012',1900)
insert into sueldos (id,periodo,sueldo) values ('002','01-01-2012',2200)
insert into sueldos (id,periodo,sueldo) values ('003','15-01-2012',1500)
insert into sueldos (id,periodo,sueldo) values ('004','01-01-2012',1800)
insert into sueldos (id,periodo,sueldo) values ('005','15-01-2012',2500)
insert into sueldos (id,periodo,sueldo) values ('005','01-01-2012',1000)
insert into sueldos (id,periodo,sueldo) values ('006','15-01-2012',1500)


insert into estados (id,estado) values ('001','No Activo')
insert into estados (id,estado) values ('002','Activo')
insert into estados (id,estado) values ('003','No Activo')
insert into estados (id,estado) values ('004','Activo')
insert into estados (id,estado) values ('005','Activo')
insert into estados (id,estado) values ('006','Activo')



1.- Seleccionar los sueldos de todo el personal femenino activo que este por debado del promedio de sueldos.

begin tran

declare @prom int

SELECT @prom= AVG(dbo.sueldos.sueldo)
FROM dbo.cliente INNER JOIN
dbo.sueldos ON dbo.cliente.id = dbo.sueldos.id INNER JOIN
dbo.estados ON dbo.cliente.id = dbo.estados.id
WHERE (dbo.cliente.sexo = 'F') AND (dbo.estados.estado = 'aCTIVO')


select cliente.id,cliente.apellidos,cliente.nombres,min(s ueldos.sueldo )
from cliente inner join sueldos on cliente.id=sueldos.id
where sueldos.sueldo<=@prom
group by cliente.id,cliente.apellidos,cliente.nombres



2.- Seleccionar solamente el sueldo mayor del personal femenino que tiene como maximo 1 sueldo en un periodo.

SELECT MAX(dbo.sueldos.sueldo) AS Expr2, dbo.sueldos.id, dbo.sueldos.periodo
FROM dbo.cliente INNER JOIN
dbo.sueldos ON dbo.cliente.id = dbo.sueldos.id INNER JOIN
dbo.estados ON dbo.cliente.id = dbo.estados.id
WHERE (dbo.cliente.sexo = 'F') AND (dbo.estados.estado = 'aCTIVO')
GROUP BY dbo.sueldos.id, dbo.sueldos.periodo
HAVING (DAY(dbo.sueldos.periodo) = '01')


3.- Incrementar en 20% al sueldo minimo del personal femenino activo

-- con est ame pordrian ayudar por favor?

Gracias
  #2 (permalink)  
Antiguo 01/06/2012, 19:29
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Querys en Sql Server

es un simple UPDATE con el claro sueldo = sueldo * 1.20, ya lo del filtro es pan comido, no??
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 04/06/2012, 09:14
Avatar de websistems  
Fecha de Ingreso: octubre-2010
Mensajes: 69
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Querys en Sql Server

se me complica me podrias ayudar?

saludos
  #4 (permalink)  
Antiguo 04/06/2012, 09:39
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Querys en Sql Server

Algo asi:

UPDATE dbo.sueldos SET dbo.sueldos.sueldo = dbo.sueldos.sueldo * 1.20
FROM dbo.cliente INNER JOIN
dbo.sueldos ON dbo.cliente.id = dbo.sueldos.id INNER JOIN
dbo.estados ON dbo.cliente.id = dbo.estados.id
WHERE (dbo.cliente.sexo = 'F') AND (dbo.estados.estado = 'ACTIVO')
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 04/06/2012, 10:52
Avatar de websistems  
Fecha de Ingreso: octubre-2010
Mensajes: 69
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Querys en Sql Server

Gracias pero quiero actualizar el sueldo menor, si te das cuenta en la tabla sueldo un cliente tiene mas de 1, quiero actualizar solamente el sueldo menor

Gracias
  #6 (permalink)  
Antiguo 04/06/2012, 12:35
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Querys en Sql Server

ok, adecualo, digo, ya no falta mucho, utiliza la funcion MIN()
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 04/06/2012, 12:42
Avatar de websistems  
Fecha de Ingreso: octubre-2010
Mensajes: 69
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Querys en Sql Server

pero min se usa para select, eso si se un min al select y los demas campos lo agrupo con un group by pero para un update no me sale
  #8 (permalink)  
Antiguo 04/06/2012, 13:02
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Querys en Sql Server

A que caray.....pues veamos si le damos al clavo, deberia ser algo asi:

WHERE (dbo.cliente.sexo = 'F') AND (dbo.estados.estado = 'ACTIVO')
AND dbo.sueldos.sueldo EXISTS(SELECT dbo.sueldos.id, dbo.sueldos.periodo, MIN(dbo.sueldos.sueldo) FROM dbo.sueldos su where su.id = dbo.estados.id GROUP BY dbo.sueldos.id, dbo.sueldos.periodo)

Pruebalo antes con un simple SELECT.
__________________
MCTS Isaias Islas
  #9 (permalink)  
Antiguo 04/06/2012, 14:49
Avatar de websistems  
Fecha de Ingreso: octubre-2010
Mensajes: 69
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Querys en Sql Server

sintaxis incorrecta cerac de la palabra clave EXISTS
  #10 (permalink)  
Antiguo 04/06/2012, 16:05
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Querys en Sql Server

Cita:
Iniciado por websistems Ver Mensaje
sintaxis incorrecta cerac de la palabra clave EXISTS
de plano no se te da la adivinanza iislas jejejeje y amigo un min aunque no se aplique aun select puedes usarlo en un update como bien te menciono iislas, puede ser algo asi:

update table
set valor=new_value
where id+'sueldo' in (select id + min(sueldo) as sueldo from tabla)

que es casi la misma logica que planteo iislas
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 04/06/2012, 17:42
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Querys en Sql Server

Si amigo Libras, pero olvidese del IN(), please !!!
__________________
MCTS Isaias Islas
  #12 (permalink)  
Antiguo 06/06/2012, 14:15
Avatar de websistems  
Fecha de Ingreso: octubre-2010
Mensajes: 69
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Querys en Sql Server

no he podido solucionarlo

P.D que tiene de malo el in()?
  #13 (permalink)  
Antiguo 06/06/2012, 14:30
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Querys en Sql Server

Que es sumamente lento
__________________
MCTS Isaias Islas
  #14 (permalink)  
Antiguo 07/06/2012, 07:35
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Querys en Sql Server

Cita:
Iniciado por websistems Ver Mensaje
no he podido solucionarlo

P.D que tiene de malo el in()?
Pues a seguirle buscando amigo ya tienes las herramientas y como hacerlo, ponle un poco de tu parte y veras que consigues sacar tu query :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #15 (permalink)  
Antiguo 07/06/2012, 11:21
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Querys en Sql Server

WHERE (dbo.cliente.sexo = 'F') AND (dbo.estados.estado = 'ACTIVO')
AND EXISTS(SELECT dbo.sueldos.id, dbo.sueldos.periodo, MIN(dbo.sueldos.sueldo) FROM dbo.sueldos su where su.id = dbo.estados.id GROUP BY dbo.sueldos.id, dbo.sueldos.periodo)
__________________
MCTS Isaias Islas

Etiquetas: querys, sql
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:57.