Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Error en Subconsulta sencillo (https://www.clubdelphi.com/foros/showthread.php?t=62333)

ingabraham 17-12-2008 15:17:47

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.

poliburro 17-12-2008 16:29:50

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

ingabraham 17-12-2008 18:05:43

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

poliburro 17-12-2008 21:02:39

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

ingabraham 18-12-2008 15:24:11

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

poliburro 18-12-2008 20:39:15

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

PepeLolo 20-12-2008 02:42:12

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:D


La franja horaria es GMT +2. Ahora son las 23:52:28.

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