compute by

16/03/2005 - 17:18 por Joan Q. | Informe spam
Hola a todos/as

select
t.cod_trabajador,
datename(year, pc.f_paga) as año,
pc.cod_concepto,
pc.importe

from trabajadores t

order by datename(year, pc.f_paga), pc.cod_concepto, pc.importe

compute sum (pc.importe) by datename(year, pc.f_paga), pc.cod_concepto
__________________________________________________________
Resultado

cod_trabajador año importe
000495 2003 637.8400
000495 2003 708.7100
omito lineas
000495 2003 708.7100
sum
== 10559.7800

cod_trabajador año importe
000495 2003 6.3800
000495 2003 7.0900
omito lineas
000495 2003 7.0900
sum
== 105.6400
_________________________________________________

Pregunta: ¿Cómo puedo hacer que me salga una sola linea con nombre
trabajador año e importe del compute sum del codigo concepto?
Linea 1:
cod_trabajador año 2003 importe corresponde a la suma del
cod_concepot 1 del año 2003
cod_trabajador año 2003 importe corresponde a la suma del
cod_concepto 2 del año 2003
cod_trabajador año 2004 importe corresponde a la suma del
cod_concepto 1 del año 2004
..
Gracias
Joan Q

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
16/03/2005 - 19:59 | Informe spam
Joan,

En el resultado que adjuntastes no veo informacion sobre "pc.cod_concepto".

Puedes usar la clausula GROUP BY de la sentencia SELECT.

select
t.cod_trabajador,
year(pc.f_paga) as año,
pc.cod_concepto,
sum(pc.importe) as sum_importes
from
trabajadores as t
group by
t.cod_trabajador,
year(pc.f_paga) as año,
pc.cod_concepto
order by
year(pc.f_paga), pc.cod_concepto, pc.importe
go


AMB


"Joan Q." wrote:

Mostrar la cita
#2 Joan Q.
17/03/2005 - 09:44 | Informe spam
Gracias Alejandro,

Para resumir he ido quitando cosas y me he pasado. Realmente es de la
siguiente manera:

declare @a datetime
declare @z datetime

set @a = '20030101'
set @z = '20040101'

select
t.nombre ,
datename(year, pc.f_paga) as año,
pc.cod_concepto,
cs.den_concepto,
sum(pc.importe) as importe

from trabajadores t

inner join empresas e
on t.codigoempresa = e.codigoempresa

inner join pagastrabajadorconceptos pc
on t.codigoempresa = pc.codigoempresa
and t.cod_trabajador = pc.cod_trabajador
and (datename (year, pc.f_paga) = datename (year, @a)
or (datename (year, pc.f_paga)) = datename (year, @z))
and pc.cod_concepto not in (995, 996, 997, 999)

inner join conceptossalariales cs
on cs.tablaconceptos = e.cod_tablaconceptos
and cs.num_concepto = pc.cod_concepto

where t.codigoempresa in (116, 136, 151, 149, 108)
and t.clavepercepcion <> 'g'
and t.epigrafe <> 0
and t.cod_trabajador = 495

group by
t.nombre,
datename(year, pc.f_paga),
pc.cod_concepto,
cs.den_concepto

order by datename(year, pc.f_paga), pc.cod_concepto, pc.importe


__________________________________________________________________________

Resultado

nombre año cod_concepto den_concepto importe
Pepito 2003 1 Salario Base 10559.7800
Pepito 2003 13 Antiguedad 105.6400
Pepito 2003 45 Ayuda estudios 35.3700
Pepito 2003 238 Complemento 3861.9300
Pepito 2003 398 Plus Transporte 848.5900
Pepito 2003 455 Complemento I.T. 104.6300
Pepito 2004 1 Salario Base 11456.8500
Pepito 2004 13 Antiguedad 114.6000
Pepito 2004 45 Ayuda estudios 36.4800
Pepito 2004 56 Atrasos 71.1500
Pepito 2004 238 Complemento 4469.1000
Pepito 2004 398 Plus Transporte 904.0400

(12 filas afectadas)

Y la pregunta más explicita ahora ¿Puedo agrupar la suma del importe de
todos los conceptos del año 2003 por una parte y del 2004 por otra parte?
Si pongo la clausula compute sum (pc.importe) by datename(year, pc.f_paga),
pc.cod_concepto me sale que

Servidor: mensaje 8120, nivel 16, estado 1, línea 9
La columna 'pc.Importe' de la lista de selección no es válida, porque no
está contenida en una función de agregado ni en la cláusula GROUP BY.

Si la pongo en group by como los importes son distintos me sale una linia
por cada importe distinto



"Alejandro Mesa" escribió en el
mensaje news:
Mostrar la cita
"pc.cod_concepto".
Mostrar la cita
#3 Alejandro Mesa
17/03/2005 - 14:03 | Informe spam
Joan,

Dale un vistazo al operador ROLLUP en la clausula GROUP BY. Creara totales
por cada grupo y un total general.

...
group by
t.nombre,
datename(year, pc.f_paga),
pc.cod_concepto,
cs.den_concepto WITH ROLLUP
...


AMB

"Joan Q." wrote:

Mostrar la cita
#4 Joan Q.
17/03/2005 - 16:10 | Informe spam
Es lo que quería. Muchas gracias Alejandro
Joan Q
"Alejandro Mesa" escribió en el
mensaje news:
Mostrar la cita
__________________________________________________________________________
Mostrar la cita
71.1500
Mostrar la cita
parte?
Mostrar la cita
pc.f_paga),
Mostrar la cita
linia
Mostrar la cita
el
Mostrar la cita
pc.cod_concepto
Mostrar la cita
Ads by Google
Search Busqueda sugerida