SQL Server - error La subconsulta ha devuelto más de un valor...

   
Vista:

error La subconsulta ha devuelto más de un valor...

Publicado por Simón simon.ogaz@gmail.com (5 intervenciones) el 23/04/2014 17:04:42
Buenos días, tengo un problema con una consulta que debo realizar y me serviria de mucho su ayuda.
Tengo el siguiente avance para la consulta.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
DECLARE @rutjef int;
 DECLARE @ANocturna int;
 DECLARE @AsiRiesgo int;
 DECLARE @BRegulador int;
 DECLARE @Gratif int;
 DECLARE @HorEnfCoordi int;
 DECLARE @v1ras_30 int;
 DECLARE @v2das_30 int;
 DECLARE @VH_Bruto_Dia int;
 
	 SET @rutjef = (select PED.valor_columna from personal as PER,
		 personal_dinamico as PED,
		 cargo_trabajador as CAR_TRA,
   		 centro_costo AS CEC where nombre_interno = 'RutJefDir' AND CAR_TRA.cod_cargo = PER.cod_cargo
	 AND CEC.cod_centro_costo = PER.cod_centro_costo
	 AND PER.nro_trabajador = PED.nro_trabajador
 	 AND PER.cod_vigen_trabajad = 'S'
 	 and PER.cod_empresa = 1
 	 AND CAR_TRA.cod_cargo in (26,41,42,103,104,158)
 	 group by valor_columna);  -- creo algo asi es lo que necesito pero devuelve mas de un dato por lo que arroja error
	 SET @ANocturna = 0;
	 SET @AsiRiesgo = 0;
	 SET @BRegulador = 0;
	 SET @Gratif = 25
	 SET @HorEnfCoordi = 0;
	 SET @v1ras_30 = 0;
	 SET @v2das_30 = 0;
	 SET @VH_Bruto_Dia = 0;
 
 
 
  SELECT DISTINCT PER.rut_trabajador RUT,
		 PER.dv_rut_trabajador DV,
		 PER.nombre NOMBRE,
		 PER.ape_paterno_trabaj APELLIDO_PATERNO,
		 PER.ape_materno_trabaj APELLIDO_MATERNO,
		 CAR_TRA.cargo_trabajador CARGO,
		 PED.valor_columna RUT_JEFE_DIREC,  --AQUI LO HACE PERO VALIDANDO EL DATO ABAJO, NO ME SIRVEN LOS DEMAS DATOS DE LA TABLA PERSONAL DINAMICO
		 CEC.centro_costo CENTRO_COSTOS,
		 PER.fec_ini_contrato INICIO_CONTRATO,
		 PER.fec_fin_contr_vige FIN_CONTRATO,
		 PER.fecha_retiro FECHA_RETIRO,
		 PER.sueldo_mensual SUELDO_MENSUAL,
		 @ANocturna '%ASIG_NOCTUR', --EL MISMO TEMA QUE EN LA SUBCONSULTA INICIAL
		 @AsiRiesgo '%ASIG_RIESGO', --EL MISMO TEMA QUE EN LA SUBCONSULTA INICIAL
		 @BRegulador '%BONO_REGUL', --EL MISMO TEMA QUE EN LA SUBCONSULTA INICIAL
		 @Gratif '%GRATIF',
		 @HorEnfCoordi HOR_ENF_COORDI,
		 @v1ras_30 V1RAS_30, --EL MISMO TEMA QUE EN LA SUBCONSULTA INICIAL
		 @v2das_30 V2DAS_30, --EL MISMO TEMA QUE EN LA SUBCONSULTA INICIAL
		 @VH_Bruto_Dia 'V/H_BRUTO_DIA'
    FROM personal as PER,
		 personal_dinamico as PED,
		 cargo_trabajador as CAR_TRA,
   		 centro_costo AS CEC
   WHERE nombre_interno in ('RutJefDir', 'ANocturna', 'AsiRiesgo', 'BRegulador', 'HorEnfCoordi', '1RAS_30_HORAS', '2DAS_30_HORAS' )
	 AND CAR_TRA.cod_cargo = PER.cod_cargo
	 AND CEC.cod_centro_costo = PER.cod_centro_costo
	 AND PER.nro_trabajador = PED.nro_trabajador
 	 AND PER.cod_vigen_trabajad = 'S'
 	 and PER.cod_empresa = 1
 	 AND CAR_TRA.cod_cargo in (26,41,42,103,104,158)
ORDER BY APELLIDO_PATERNO

NECESITO QUE ME DEVUELVA LOS DATOS DE LA TABLA PERSONAL_DINAMICO QUE CORRESPONDEN, LA ESTRUCTURA DE LA TABLA ES ALGO ASI

cod_empresa cod_planta nro_trabajador dv_trabajador nombre_interno valor_columna valor_numerico valor_fecha
1 1 9639004 1 gmen N 0.0000 NULL
1 1 14090527 5 CBienes 3 NULL NULL
1 1 14090527 5 tip_comi Vendedor 0.0000 NULL
1 1 7470323 2 RutJefDir 6245385 6245385.0000 NULL
1 1 10066035 0 RutJefDir 15390335 15390335.0000 NULL
1 1 14090527 5 RutJefDir 15390335 15390335.0000 NULL
1 1 17888999 0 CBienes 3 NULL NULL
1 1 17888999 0 tip_comi Vendedor 0.0000 NULL
1 1 17888999 0 RutJefDir 6245385 6245385.0000 NULL
1 1 12333444 2 CBienes 3 NULL NULL
1 1 12333444 2 tip_comi Vendedor 0.0000 NULL

AGRADECERIA SU AYUDA Y DISCULPEN SI ESTA UN POCO DESORDENADA LA INFORMACION PERO YA ME TIENE MAREADO ESTE TEMA Y QUIERO SACARLO PRONTO
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

error La subconsulta ha devuelto más de un valor...

Publicado por Isaias (3181 intervenciones) el 23/04/2014 18:12:11
¿Cuál es el problema?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

error La subconsulta ha devuelto más de un valor...

Publicado por simon simon.ogaz@gmail.com (5 intervenciones) el 23/04/2014 21:42:51
Lo que sucede es que los datos 'RutJefDir', 'ANocturna', 'AsiRiesgo', 'BRegulador', 'HorEnfCoordi', '1RAS_30_HORAS', '2DAS_30_HORAS' estan en la tabla personal dinamico como registros asociados al codigo de usuario y no como columnas de una tabla para poder extraerlos y mostrarlos, por lo que al ponerlos en una subquery arrojan mas de un resultado y no puedo mostrar los datos como corresponderia.

agradeceria mucho tu ayuda!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

error La subconsulta ha devuelto más de un valor...

Publicado por Isaias (3181 intervenciones) el 23/04/2014 22:19:45
Por principio de cuentas deberías utilizar JOIN, en lugar de enlazar tus tablas mediante el WHERE, ¿cierto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

error La subconsulta ha devuelto más de un valor...

Publicado por simon (5 intervenciones) el 23/04/2014 22:54:58
en este caso no lo hice porque son muchos datos y los join le dan mas i/o al proceso por lo que demora mas la consulta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

error La subconsulta ha devuelto más de un valor...

Publicado por Isaias (3181 intervenciones) el 24/04/2014 17:45:59
Concepto totalmente ERRONEO, el hecho de manejar JOIN te dará un mejor tiempo de respuesta, ¿Dónde esta el truco?, la definición correcta de los índices y el mantenimiento de estos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

error La subconsulta ha devuelto más de un valor...

Publicado por Simón (5 intervenciones) el 24/04/2014 23:28:57
Hola!!!
Tengo un par de dudas sobre el mismo analisis que estaba realizando y me hizo crear esta consulta, te agradeceria muuuuuuuucho la ayuda ya que ha pasado un dia y aun estoy en este mismo tema.

En definitiva tuve que crear una tabla llamada datos_dinamicos que alojara los datos que estaban como registros en la tabla personal_dinamico y que eran los que no me permitian terminar mi query y lo que dio fue esto.

DECLARE @Gratif int;
DECLARE @VH_Bruto_Dia int;

SET @Gratif = 25
SET @VH_Bruto_Dia = 0;
SELECT DISTINCT CEC.centro_costo CENTRO_COSTOS,
CAR_TRA.cargo_trabajador CARGO,
PER.rut_trabajador RUT,
PER.dv_rut_trabajador DV,
PED.nro_trabajador CODIGO,
PER.ape_paterno_trabaj APELLIDO_PATERNO,
PER.ape_materno_trabaj APELLIDO_MATERNO,
PER.nombre NOMBRE,
DDI.rutjefdir RUT_JEFE_DIREC,
PER.fec_ini_contrato INICIO_CONTRATO,
PER.fec_fin_contr_vige FIN_CONTRATO,
PER.fecha_retiro FECHA_RETIRO,
PER.sueldo_mensual SUELDO_BASE,
DDI.v1ras_30 V1RAS_30,
DDI.v2das_30 V2DAS_30,
DDI.a_nocturna '%ASIG_NOCTUR',
DDI.asi_riesgo '%ASIG_RIESGO',
DDI.b_regulador '%BONO_REGUL',
@Gratif '%GRATIF',
DDI.hor_enf_coordi HOR_ENF_COORDI,
@VH_Bruto_Dia 'V/H_BRUTO_DIA'
FROM personal as PER,
personal_dinamico as PED,
cargo_trabajador as CAR_TRA,
centro_costo AS CEC,
datos_dinamicos AS DDI
WHERE CAR_TRA.cod_cargo = PER.cod_cargo
AND DDI.nro_trabajador = PER.nro_trabajador
AND DDI.nro_trabajador = PED.nro_trabajador
AND CEC.cod_centro_costo = PER.cod_centro_costo
AND PER.nro_trabajador = PED.nro_trabajador
AND PER.cod_vigen_trabajad = 'S'
AND CAR_TRA.cod_cargo in (26,41,42,103,104,158)
ORDER BY APELLIDO_PATERNO

Las variables fueron creadas para arrojar a excel el resultado completo de la consulta y que todos los registros tengan esas columnas ya creadas, y ademas la gratificacion es para todos igual por lo que el dato en duro puede dejarse asi.

En cuanto al 'VALOR HORA BRUTO POR DIA' (V/H_Bruto_Dia) se calcula con el porcentaje de gratificacion (25%) y el porcentaje de valor riesgo (Varia de acuerdo al registro y se guarda en DDI.asi_riesgo).

Mi problema ahora se me ocurre como hacer ese calculo para que se muestre en la respuesta de mi query en el campo 'V/H_BRUTO_DIA'

y mi otro problema es que al campo 'SUELDO_BASE' no se como sacarle los decimales tambien solo en la respuesta de mi query

Agradeceria una infinidad ayuda en estos detalles, pero que a la vez son grandes cosas que no me dejan avanzar.

MUCHOS SALUDOS!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

error La subconsulta ha devuelto más de un valor...

Publicado por Simón (5 intervenciones) el 24/04/2014 23:58:52
ya solucione lo del sueldo!!!!!!!!!!!

quedo asi

CAST(ROUND(PER.sueldo_mensual,0,1) AS INTEGER) SUELDO_BASE,

me falta lo de el calculo del sueldo base, agradeceria mucho la ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar