Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-12-2008
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 614
Poder: 19
ingabraham Va por buen camino
Error en Subconsulta sencillo

interbase 6.0
Espero la ayuda de los que dominan el sql.

El errror es el sgte:
multiple row in singleton select

Código SQL [-]

 Select n.codigo, n.nombre, Sum(Select n.VALORDV From  nomina n where n.Cedulae=e.cedula and n.codigoc='010' )as Sueldo
 From   empleado t, empleos e,  cargos c, niveles n 
 Where  t.cedula=e.cedula And e.cod_cargo=c.codigo And  c.CODIGONIVEL=n.codigo 

 GROUP BY n.codigo,n.nombre

Explicación:
tengo las sgtes tablas:

empleados,empleos = empleados clasificados por niveles

cargo,niveles =directivo,asesor...

nomina =estan los historiales de todas las nominas desde enero2008 a dic2008.

Resultado esperado

nivel sueldo
------------------
directivo 4522526
asesor 452466
profesional 552466

cuando filtro en un solo mes si me funciona pero al momento de escojer todos los meses de la nomina , me arroja el error, q a mi parecer es la seleccion de multiples registros.
como puedo hacer de otra manera esto.

Última edición por ingabraham fecha: 17-12-2008 a las 15:21:03.
Responder Con Cita
  #2  
Antiguo 17-12-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 25
poliburro Va por buen camino
Código SQL [-]
 

     Select Niveles.Codigo, Niveles.Nombre, Sueldo.Monto
       From Empleado As Empleado
Inner Join Empleos As Empleos
           On Empleado = Empleado.Cedula = Empleos.Cedula
Inner Join Cargos As Cargos
           On Empleos.Cod_Cargo = Cargos.Codigo
Inner Join Niveles As Niveles
           On Cargos.CodigoNivel = Niveles.Codigo
  Left Join (
                      Select Cedula, Sum(VALORDV ) As Monto
                        From nomina 
                      where codigoc = '010'
                 Group By Cedula
                ) Sueldo
         On Empleado.Cedula = Sueldo.Cedula
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 17-12-2008
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 614
Poder: 19
ingabraham Va por buen camino
Gracias Señor Programador.

Código SQL [-]
 
 Select Niveles.Codigo, Niveles.Nombre, Sueldo.Monto
       From Empleado Empleado
Inner Join Empleos  Empleos
           On  Empleado.Cedula  = Empleos.Cedula
Inner Join Cargos  Cargos
           On Empleos.Cod_Cargo = Cargos.Codigo
Inner Join Niveles  Niveles
           On Cargos.CodigoNivel = Niveles.Codigo
  Left Join (
                 select Cedulae, Sum((CAST(VALORDV AS NUMERIC)))  As Monto
                 From nomina
                 where codigoc = '010'
                 Group By Cedulae
                ) As Sueldo
         On Empleado.Cedula = Sueldo.Cedulae

Inserte mi codigo sql asi:
me aparece error
invalid token
Select.

En esta linea
select Cedulae, Sum((CAST(VALORDV AS NUMERIC))) As Monto
Responder Con Cita
  #4  
Antiguo 17-12-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 25
poliburro Va por buen camino
Prueba quitando el As. No conozco casi nada del sql de interbase por lo que tendremos que esperar que los compañeros expertos en ese motor nos echen una mano.

Saludos
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #5  
Antiguo 18-12-2008
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 614
Poder: 19
ingabraham Va por buen camino
Gracias por tu ayuda

en realidad esta linea de union no la tengo muy clara


Código SQL [-]
Left Join (
                 select Cedulae, Sum((CAST(VALORDV AS NUMERIC)))  As Monto
                 From nomina                 where codigoc = '010'
                 Group By Cedulae
                ) As Sueldo
         On Empleado.Cedula = Sueldo.Cedulae

creo q intentas armar una tabla logica(ced,monto) llamada sueldo y comparar los registros con cada cedula
Responder Con Cita
  #6  
Antiguo 18-12-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 25
poliburro Va por buen camino
Efectivamente, meter un select a nivel de fila es tremendamente ineficiente. Conviene más obtener la suma de montos por cada cédula y esta subcosulta unirla con los empleados por su cédula.

Saludos
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #7  
Antiguo 20-12-2008
Avatar de PepeLolo
PepeLolo PepeLolo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Fuenlabrada - Madrid - Espagna
Posts: 265
Poder: 24
PepeLolo Va por buen camino
La consulta seria esto
Código SQL [-]
Select n.codigo, n.nombre, Sum(nm.VALORDV) Sueldo
 From empleado t, 
      join empleos e on t.cedula=e.cedula
      join cargos c on e.cod_cargo=c.codigo
      join niveles n on c.CODIGONIVEL=n.codigo
      join nomina nm on nm.Cedulae=e.cedula and nm.codigoc='010'
 GROUP BY n.codigo,n.nombre

Suerte
__________________
PepeLolo
El hombre el único virus que mide más de unas cuantas micras
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Donde Esta EL Error??? (Sencillo, Nivel Principiante) Hitman014 Varios 5 06-04-2008 04:42:55
Error subconsulta en BDE con MsAccess eduardo_2009 Conexión con bases de datos 1 20-12-2007 14:05:56
Error en subconsulta de un Insert lucasarts_18 MS SQL Server 4 02-12-2005 21:44:03
Subconsulta en un ADOQuery Sr.Scorpion SQL 4 09-08-2005 11:08:34
Subconsulta DanielAlexander SQL 3 19-05-2003 21:59:56


La franja horaria es GMT +2. Ahora son las 01:18:29.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi