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:

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





Respuesta Responder a este mensaje
#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:
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:

> 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
>
>
>
>
>
Respuesta Responder a este mensaje
#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:

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



Respuesta Responder a este mensaje
#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:
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:

> 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:
> > 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:
> >
> > > 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
> > >
> > >
> > >
> > >
> > >
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida