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

 
Vista:
sin imagen de perfil

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

Publicado por Simón (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
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

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

Publicado por Isaias (4558 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
sin imagen de perfil

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

Publicado por simon (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
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

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

Publicado por Isaias (4558 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
sin imagen de perfil

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
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

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

Publicado por Isaias (4558 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
sin imagen de perfil

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
sin imagen de perfil

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