SQL Server - Ayuda con query

 
Vista:

Ayuda con query

Publicado por claudia (1 intervención) el 30/09/2010 08:20:04
Buen dia a todos, de antemano agradezco a quien pueda ayudarme a resolver el siguiente problema.
Resulta que tengo un query que detallo mas abajito el cual me esta generando los siguientes datos

cod_empl salario vacomi afp renta
10001 500 0 20 2
10001 500 100 10 1

yo quiero que me aparezca de la siguiente manera:
cod_empl salario vacomi afp renta
10001 500 100 30 3

osea que el afp tiene que ir sumado del salario y del valor de comision y actualmente me muestra el calculo por separado, en el caso de vacomi se compone de comision y vacacion y tienen un pp.codigo distinto por eso esta asi en el case, en afp es sólopara determinar a que afp pertenece el empleado.
no se como podria hacer para agrupar estos campos, el query que tengo es el siguiente

SELECT distinct( A.cod_empl),
B.salario,
(case when d.pp_codigo = '3' or d.pp_codigo = '4'then isnull(sum(a.pg_salario),0)ELSE '0' END) as vacomi,

(case when b.COD_AFP = '1' or b.COD_AFP = '2' or b.COD_AFP = '3'then isnull(sum(a.pg_afp),0)ELSE '0' END) as afp,

isnull(sum(pg_renta),0) as renta

FROM PLAN_GENERADAS A,
PLAN_EMPLEADOS B,
PLAN_PERIODOS C,
TIPO_PLANILLA D
WHERE ( B.cod_empl = A.cod_empl ) and
( (A.PP_CODIGO = C.PP_CODIGO) AND
(A.PP_CORRELATIVO = C.PP_CORRELATIVO)) AND
(A.PP_CODIGO = D.PP_CODIGO) AND
D.PP_RENTA = 'S'and B.estado_cliente = 'A' and
month( pp_fecha_fin) = '1' and
year(c.pp_fecha_fin) = '2010'
GROUP BY A.cod_empl,

B.salario,
B.cod_afp , pp_mes , d.pp_codigo
ORDER BY A.cod_empl ASC

Nuevamente muchas gracias a quienes puedan ayudarme
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
sin imagen de perfil
Val: 4
Ha disminuido su posición en 43 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

RE:Ayuda con query

Publicado por Leonardo Josué (79 intervenciones) el 30/09/2010 19:41:26
Buenos días Claudia:

Por los datos que pones de ejemplo creo que tienes que hacer una subconsulta y agrupar nuevamente los datos, algo como esto:

SELECT cod_empl, salario, sum(vacomi), sum(afp), sum(renta) from
(
--aquí va toda la consulta que pusiste en tu post sin el ORDER BY)
) T1
GROUP BY cod_empl, salario
ORDER BY cod_empl

Pruébalo a ver si te funciona. También me gustaría hacerte algunas observaciones con respecto a tu consulta, que no tienen que ver con tu problema, pero que son buenas prácticas:

El lugar de poner esto:

FROM PLAN_GENERADAS A,
PLAN_EMPLEADOS B,
PLAN_PERIODOS C,
TIPO_PLANILLA D
WHERE ( B.cod_empl = A.cod_empl ) and
( (A.PP_CODIGO = C.PP_CODIGO) AND
(A.PP_CORRELATIVO = C.PP_CORRELATIVO)) AND
(A.PP_CODIGO = D.PP_CODIGO)

Utiliza el operador INNER JOIN, quedaría más o menos así:

FROM plan_generadas A INNER JOIN plan_empleados B
ON B.cod_empl = A.cod_empl
INNER JOIN plan_periodos C
ON A.pp_codigo = C.pp_codigo AND A.pp_correlativo = C.pp_correlativo
INNER JOIN tipo_planilla D
ON A.pp_codigo = D.pp_codigo

Es más eficiente y más ordenada. Como verás no hay necesidad de aplicar paréntesis. El la sección WHERE quedarían las condiciones para filtrar tus datos.

También te recomendaría manejar un estándar sobre las mayúsculas y las minúsculas para el manejo de tus campos:

A.cod_empl -- Mayúsculas y minusculas
b.COD_AFP --Minúsculas y mayúsculas
D.PP_RENTA --sólo mayúsculas
d.pp_codigo --solo minusculas

Aunque no afectan la ejecución de tu consulta resulta muy confuso tratar de leer tu código.

Saludos
Leo.
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